复合键类关系→错误:未映射到单个属性

Posted

技术标签:

【中文标题】复合键类关系→错误:未映射到单个属性【英文标题】:Composite key class relationship → ERROR: not mapped to a single property 【发布时间】:2015-04-09 13:34:01 【问题描述】:

CVariacaoTO 类有一个复合键(FK_T、FK_F、FK_F_VARIACAO)。 (FK_F, FK_F_VARIACAO) 也是 FVariacaoTO 表的外键,在多对一关系中。

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns(
    @JoinColumn(name = "FK_F", referencedColumnName = "FK_F", nullable = false, insertable = false, updatable = false),
    @JoinColumn(name = "FK_F_V", referencedColumnName = "ID", nullable = false, insertable = false, updatable = false) )
@NotNull
private FVariacaoTO fVariacaoTO;

FVariacaoTO 类有两个主键,入一个@Embeddable 类FVariacaoPK。

发生此错误:CVariacaoTO.fVariacaoTO 的 referencedColumnNames(FK_F, ID) 未映射到单个属性

关系只是在 CVariacaoTO 类中描述。 我不知道是否需要在 FVariacaoTO 类中写一些关于关系的东西,制作 @OneToMany 或类似的东西。

这个错误通常是怎么做的? 这种关系通常如何处理?


编辑:附加信息。

在FVariacaoTO类中,key为@EmbeddedId:

@EmbeddedId @AttributeOverrides( @AttributeOverride(name = "fkF", column = @Column(name = "fkF", nullable = false)), @AttributeOverride(name = "id", column = @Column(name = "id", nullable = false)) ) @NotNull private FVariacaoPK fVariacaoPK;

在 FVariacaoPK 类中,具有此 @EmbeddedId:

@Column(name = "FK_F", nullable = false) private int fkF; @Column(name = "ID", nullable = false) private int id;

【问题讨论】:

【参考方案1】:

目前还不能运行应用程序,因为还有其他问题需要解决,但是做下一个方法编译器不再抱怨这个问题:

@JoinColumn(name = "FK_F", referencedColumnName = "fkF", nullable = false, insertable = false, updatable = false), @JoinColumn(name = "FK_F_V", referencedColumnName = "id", nullable = false, insertable = false, updatable = false)

我在 referencedColumnName 中设置了 FVariacaoTO 中的字段名称,而不是 FVariacaoPK 中的 @Embedabble 对象

【讨论】:

如果我在父节点和子节点都有 EmbeddedId(两者都有不同的列),并且我想将 OneToMany 从父节点映射到子节点。我不能使用@JoinColumns,因为一列不在两端。并且不使用 mappedBy 也...有什么想法吗?

以上是关于复合键类关系→错误:未映射到单个属性的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate OneToMany 关系:未映射到单个属性

Hibernate复合主键映射

Hibernate复合主键映射

org.hibernate.AnnotationException:referencedColumnNames 引用未映射到单个属性

映射父子关系——由两个对象的字段组成的复合键

RestKit – 使用关系映射将单个源映射到多个目的地