0

我目前正在尝试创建一对 Hibernate 带注释的类,以从旧系统中的一对表中加载(只读)。遗留系统使用一致(如果有些过时)的方法来键入表。我试图映射的表如下:

Customer                     CustomerAddress
--------------------------   ----------------------------
customerNumber:string (pk)   customerNumber:string (pk_1)
name:string                  sequenceNumber:int    (pk_2)
                             street:string
                             postalCode:string

我通过创建这样的 CustomerAddress 类来解决这个问题:

@Entity
@Table(name="CustomerAddress")
@IdClass(CustomerAddressKey.class)
public class CustomerAddress {

  @Id
  @AttributeOverrides({
    @AttributeOverride(name = "customerNumber", column = @Column(name="customerNumber")), 
    @AttributeOverride(name = "sequenceNumber", column = @Column(name="sequenceNumber"))
  })

  private   String       customerNumber;

  private   int          sequenceNumber;

  private   String       name;

  private   String       postalCode;
  ...
}

CustomerAddressKey 类是具有两个关键字段的简单可序列化对象。然后将 Customer 对象定义为:

@Entity
@Table(name = "Customer")
public class Customer {

  private String customerNumber;

  private List<CustomerAddress> addresses = new ArrayList<CustomerAddress>();

  private String name;

  ...
}

所以,我的问题是:如何在 Customer 表上表达 OneToMany 关系?

4

2 回答 2

0

对于我自己的问题,我可能有一个答案。将以下内容添加到客户:

@OneToMany(mappedBy="customer")
@JoinColumn(name="customerNumber")
List<CustomerAddress> addresses = new ArrayList<CustomerAddress>();

以及以下到 CustomerAddress:

@ManyToOne
@JoinColumn(name="customerNumber")
protected Customer customer;

事实证明,这是一个比我最初想象的更容易解决的问题。典型的。

于 2010-05-09T16:36:27.773 回答
0

我假设您已经阅读了 Bauer/King Hibernate 的书,这本书在解释如何正确实现复合主键方面非常糟糕。不要让自己被一本坏书所迷惑:复合主键不是遗留系统的属性......

于 2010-09-08T12:29:10.603 回答