栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用注释在Hibernate中表示复合键?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用注释在Hibernate中表示复合键?

最简单的方法是将您的关联直接放在嵌入式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`))


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/401345.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号