【问题标题】:JPA/Hibernate - Create a table with foreign key onlyJPA/Hibernate - 仅使用外键创建表
【发布时间】:2014-01-27 21:51:14
【问题描述】:

如何使用 Hibernate 创建一个实体表,它将其中的外键作为主键。将其视为两个具有多对多关系的表之间的连接表(具有很少的其他属性)。

有示例代码吗?

【问题讨论】:

    标签: spring hibernate jpa


    【解决方案1】:

    有什么不使用 PK 的真正理由吗?如果实体有其他属性,我会说你最好有一个。

    如果你真的不想要一个,你可以使用 JPA 的 @EmbeddedId 使用复合键

        private UserSessionId id
    
        @EmbeddedId
        @AttributeOverrides({
                @AttributeOverride(name = "userId", column = @Column(name = "user_id", nullable = false)),
                @AttributeOverride(name = "sessionId", column = @Column(name = "session_id", nullable = false)) })
        public UserSessionId getId() {
            return this.id;
        }
    
        public void setId(UserSessionId id) {
            this.id = id;
        }
    

    然后你可以定义一个单独的实体 UserSessionId 包含两个 FK,至少这是 Hibernate Tools 生成复合键关系的方式

    【讨论】:

      【解决方案2】:

      如果连接中不涉及额外字段(即仅外键)。您可以使用以下技术,不需要 java 域对象,hibernate 会为您解决所有问题。

      http://www.mkyong.com/hibernate/hibernate-many-to-many-relationship-example-annotation/

      您的表中仍然可以有其他列,例如 creation_date,但它们的值需要在数据库级别更新。

      【讨论】:

      • 我想避免在数据库级别手动更新,并将其他属性作为连接表的列。
      【解决方案3】:

      JSR 文档中有非常好的组合 PK 示例,请查看链接中的 JSR 317persistence-2_0-final-spec.pdf,2.4 Primary Keys and Entity Identity 部分有很好的示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-01
        • 2014-10-12
        • 1970-01-01
        • 2013-01-25
        • 1970-01-01
        • 1970-01-01
        • 2013-05-24
        相关资源
        最近更新 更多