最简单的方法是将您的关联直接放在嵌入式id组件中。
Hibernate参考文档
- 5.1.2.1.1节。id作为使用组件类型的属性()
示例(仅编写重要的getter()和setter())
@Entitypublic class Block { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="BLOCK_OID") long blockOid; @oneToMany(fetch = FetchType.LAZY, mappedBy = "id.block", cascade=CascadeType.ALL) Set<Account> accounts = new HashSet<Account>();}@Entitypublic class Account { @EmbeddedId BlockAccountId id; public Account() { this.id = new BlockAccountId(); } public void setBlock(Block pBlock) { this.id.setBlock(pBlock); } public Block getBlock() { return this.id.getBlock(); } public String getAccountRole() { return this.id.getAccountRole(); } public void setAccountRole(String accountRole) { this.id.setAccountRole(accountRole); }}@Embeddablepublic class BlockAccountId implements java.io.Serializable { @ManyToOne(optional = false) private Block block; @Column(name = "ACCOUNT_ROLE", nullable = false, length = 10) private String accountRole; public BlockAccountId() { } //Implement equals and hashpre}对应的数据库表是:
CREATE TABLE block ( BLOCK_OID bigint(20) NOT NULL auto_increment, PRIMARY KEY (`BLOCK_OID`))CREATE TABLE account ( ACCOUNT_ROLE varchar(10) NOT NULL, block_BLOCK_OID bigint(20) NOT NULL, PRIMARY KEY (`ACCOUNT_ROLE`,`block_BLOCK_OID`), KEY `FK_block_OID` (`block_BLOCK_OID`), ConSTRAINT `FK_block_OID` FOREIGN KEY (`block_BLOCK_OID`) REFERENCES `block` (`BLOCK_OID`))



