Tôi cần sự trợ giúp của bạn để lập bản đồ mối quan hệ trong Hibernate của hai bảng sử dụng chú thích @ElementCollection bằng .JPA: cách sử dụng chú thích @ElementCollection?
Đầu tiên là bảng cha
Bảng tên: Chánh
DB Cột
KEY1 Char (first primary key field)
KEY2 Char (second primary key field)
DESCRIPTION Char
DEPENDENTID BigInt
Điều thứ hai là bảng phụ thuộc
TableName: phụ thuộc
DB Cột
PARENTID BigInt (first primary key field)
CODE Char (second primary key field)
FIELD1 Char
FIELD2 Char
tôi cần phải xác định PK cho cả bảng sử dụng chú thích @EmbeddedId, vì vậy tôi đã tạo ra hai lớp:
@Embeddable
public class ParentPK implements Serializable
{
@Column(name="K1")
private String iK1;
@Column(name="K2")
private String iK2;
// I omit the constructor, getter, setter, equals, hashcode method
}
@Embeddable
public class DependentPK implements Serializable
{
@Column(name="PARENTID")
private String iParentId;
@Column(name="CODE")
private String iCode;
// I omit the constructor, getter, setter, equals, hashcode method
}
và sau đó tôi đã tạo hai đậu:
Lớp cho bảng THUỘC .
Lưu ý rằng trong lớp học này tôi không muốn có bất kỳ chú thích quan hệ
@Entity
@Table(name = "DEPENDENT")
public class DependentBean implements Serializable
{
@EmbeddedId
private DependentPK iDependentPK;
@Column(name = "FIELD1")
private String iField1;
@Column(name = "FIELD2")
private String iField2;
// I omit the constructor, getter, setter methods
}
Và lớp cho bảng PHỤ HUYNH
@Entity
@Table(name = "PARENT")
public class ParentBean implements Serializable
{
@EmbeddedId
ParentPK iParentPK;
@Column(name = "DESCRIPTION")
private String iDescription;
@Column(name = "DEPENDENTID")
private long iDependentId;
@ElementCollection
@CollectionTable(name="DEPENDENT", joinColumns={@JoinColumn(name="PARENTID", referencedColumnName="DEPENDENTID")})
private Set<DependentBean> iDependentBeans = new HashSet<DependentBean>();
// I omit the constructor, getter, setter methods
}
Khi tôi cố gắng triển khai tôi đã nhận lỗi:
Caused by: org.hibernate.MappingException: Foreign key (FK9619C2A17B05CB2:DEPENDENT [iDependentBeans_PARENTID,iDependentBeans_CODE])) must have same number of columns as the referenced primary key (DEPENDENT [PARENTID,iDependentBeans_PARENTID,iDependentBeans_CODE])
Vì vậy, tôi đang làm điều gì đó sai, nhưng tôi không thể tưởng tượng được điều gì. Có ai muốn giúp tôi không?
Trước hết cảm ơn vì câu trả lời của bạn. Nhưng tôi đã thấy rằng sử dụng chú thích onetomany Hibernate tạo một kết nối khi được truy cập vào bảng cha. Tôi chỉ cần truy cập bảng phụ thuộc khi thuộc tính của nó được truy cập.Vì vậy, cách để làm điều này là gì? – gpezzini
Tôi nghĩ rằng bạn sử dụng @OneToMany (fetch = FetchType.EAGER), điều này chắc chắn sẽ làm cho một tham gia như bạn nói. Hãy thử sử dụng @OneToMany (fetch = FetchType.LAZY) và đảm bảo rằng bạn truy cập vào thuộc tính trước khi kết thúc phiên. Nếu không, bạn sẽ nhận được một LazyInitializationException. – study
Xin chào một lần nữa, nhưng có thể xác định OneToMany giữa hai bảng của tôi ** Phụ huynh ** và ** Phụ thuộc **? Như bạn thấy, bảng ** Phụ huynh ** có trường 'DEPENDENTID' có thể được liên kết với trường 'PARENTID' của bảng ** Phụ thuộc **. ** Bảng phụ thuộc ** có trường khóa chính khác: 'CODE'. Hai bảng có các khóa chính của riêng nó được mô tả bằng cách sử dụng lớp có thể nhúng. Vì vậy, theo ý kiến của bạn, bạn có thể sử dụng chú thích @OneToMany trong trường hợp này? Tôi đã thử nhiều cách mà không thành công và tôi đã thử rất nhiều tìm kiếm mà không tìm thấy gì. Cảm ơn trước cho thời gian của bạn – gpezzini