繁体   English   中英

Hibernate列同时用作复合主键和复合外键的一部分

[英]Hibernate column used as a part of a composite primary key and a part composite foreign key at the same time

我得到了不允许更改的表结构,并且在查找Hibernate映射解决方案时遇到问题。

表A

a1 (pk)
a2

表B

b1 (pk, fk on 'A.a1')
b2 (pk)
b3

表C

c1 (pk, fk on 'B.b1')
c2 (pk, fk on 'B.b2')
c3 (pk)
c4

表D

d1 (pk)
d2 (pk, fk on 'A.a1')
d3 (fk on 'C.c2')
d4 (fk on 'C.c3')
d5

现在我遇到的问题是在表D的d2列的 b级别上,它是组合键的一部分,也是表C的外键的一部分

在休眠模式下,我这样做了

@Embeddable
public class TableDId {
    private Long d1;
    private TableA d2;

    @Column(name="d1")
    public Long getD1() {
        return this.d1;
    }

    @ManyToOne
    @JoinColumn(name="d2")
    public Long getD2() {
        return this.d2;
    }
    // Setters
}


@Entity
public class TableD {
    private TableDId id;
    private TableC tableC;

    @EmbeddedId @GeneratedValue(strategy = GenerationType.AUTO)    
    public TableDId getId() {
        return this.id;
    }

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name="id.d2", referencedColumnName="c1"),
        @JoinColumn(name="d3", referencedColumnName="c2"),
        @JoinColumn(name="d4", referencedColumnName="c3")
    })
    public TableC getTableC() {
        return tableC;
    }

    // Setters
}

如您所料,它不起作用,保存新的TableD时出现了休眠错误

java.sql.BatchUpdateException: Unknown column 'id.d2' in 'field list'

谁能提出可行的解决方案?

非常感谢。

@JoinColumn(name="id.d2", referencedColumnName="c1")

尝试删除ID。 从映射

@JoinColumn(name="d2", referencedColumnName="c1")

示例http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html (第2.2.6节)

您应该发布所有带注释的类。 您在所有类@EmbeddedId中使用还是在使用IdClass 您应该在“派生身份的映射”部分中查看JPA 2规范。 我认为您需要在关联上使用@MapsId 或也将@Id注释放置在关联上,但这取决于您映射其他类的精确程度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM