10


我必须使用 hibernate 并且不太确定如何解决这个问题,我有 2 个具有 1..n 关系的表,如下所示:

--------
表_A
--------
first_id (pk)
second_id (pk)
[其他领域]

--------
表_B
--------
first_id (pk)(fk TABLE_A.first_id)
second_id (pk)(fk TABLE_A.second_id)
第三个ID(PK)
[其他领域]

我怎样才能用 Hibernate 管理这个???

我不知道如何管理第二个表的主键......

4

3 回答 3

20

在Hibernate 参考文档中有一个与您的案例完全相似的示例。就在这个例子之前,你会找到解释。这是与您的问题匹配的示例(用户是表 A,客户是表 B):

@Entity
class Customer {
   @EmbeddedId CustomerId id;
   boolean preferredCustomer;

   @MapsId("userId")
   @JoinColumns({
      @JoinColumn(name="userfirstname_fk", referencedColumnName="firstName"),
      @JoinColumn(name="userlastname_fk", referencedColumnName="lastName")
   })
   @OneToOne User user;
}

@Embeddable
class CustomerId implements Serializable {
   UserId userId;
   String customerNumber;

   //implements equals and hashCode
}

@Entity 
class User {
   @EmbeddedId UserId id;
   Integer age;
}

@Embeddable
class UserId implements Serializable {
   String firstName;
   String lastName;

   //implements equals and hashCode
}

注意:如果你有这两个表的代理标识符,那会简单得多。除非您被迫处理遗留模式,否则请帮自己一个忙并使用代理键。

于 2011-08-22T11:49:35.267 回答
4

使用@PrimaryKeyJoinColumn@PrimaryKeyJoinColumns注释。从休眠手册

注释确实说实体的@PrimaryKeyJoinColumn主键用作关联实体的外键值。

于 2011-08-22T11:44:37.127 回答
0
public class User implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 5478661842746845130L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
}
@Entity
public class Author {

    @Id
    @Column(name = "AUTHOR_ID", nullable = false)
    private int authorId;
    @Column(name = "ENABLED", nullable = false, length = 1)
    private boolean enabled;

    @OneToOne
    @MapsId
    @JoinColumn(name = "AUTHOR_ID", referencedColumnName = "ID", nullable = false, insertable = false, updatable = false)
    User user;

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

}
于 2017-05-17T12:38:22.360 回答