我正在尝试将旧的 XML(从 Hibernate 3.x)迁移到注释(Hibernate 5.x JPA 2.1)。
ClassA: id (pk) VAR_1 VAR_2 ...
ClassB: FIRST_ID (pk) (fk) SECOND_ID (pk) ...
JPA(休眠):
@Entity
@Table("CLASS_A")
public ClassA {
@Column(name = "id")
private String id;
/* old working XML
<many-to-one name="var1" class="ClassB" lazy="false"
fetch="join">
<formula>'var_Formula1'</formula>
<column name="VAR_1" />
</many-to-one> */
@ManyToOne( fetch = FetchType.EAGER )
@Fetch( FetchMode.JOIN )
@Formula( value = "'var_Formula1'" )
@MapsId( "id1" )
private ClassB var1;
/* old working XML
<many-to-one name="var2" class="ClassB" lazy="false"
fetch="join">
<formula>'var_Formula2'</formula>
<column name="VAR_2" />
</many-to-one> */
@ManyToOne( fetch = FetchType.EAGER )
@Fetch( FetchMode.JOIN )
@Formula( value = "'var_Formula2'" )
@MapsId( "id1" )
private ClassB var2;
}
@Entity
@Table("CLASS_B")
public ClassB {
@EmbeddedId
private ClassC classCPK;
// other variables/columns
}
@Embeddable
public ClassC implements Serializable {
@Column(name = "FIRST_ID")
private String id1;
@Column(name = "SECOND_ID")
private String id2;
}
但是我明白了
错误:- 导致:java.sql.SQLSyntaxErrorException:ORA-00904: “CLASSA5_”。“VAR_1_FIRST_ID”:无效标识符
我尝试在@MapsId中使用字段名称、属性名称。 我尝试将 @JoinColumns 与可嵌入类中提到的两个 id 一起使用。 我尝试使用 @MapKey 而不是 @MapsId。
我的错误是什么?
我希望在生成的 hbm2ddl 中具有类似以下内容:
left outer join
ORACLE.ClassB pojodefl9_
on 'var_Formula1'=pojodefl9_.FIRST_ID
and pojosclass1_.var1=pojodefl9_.SECOND_ID
left outer join
ORACLE.ClassB pojodefl10_
on 'var_Formula2'=pojodefl10_.FIRST_ID
and pojosclass1_.var2=pojodefl10_.SECOND_ID
对于那些正在努力解决类似问题的人,我找到了正确的迁移注释替换..
@ManyToOne( fetch = FetchType.EAGER )
@Fetch( FetchMode.JOIN )
@JoinColumnOrFormula( column = @JoinColumn( name = "var_1", referencedColumnName = "SECOND_ID" ) )
@JoinColumnOrFormula( formula = @JoinFormula( value = "'var_Formula1'", referencedColumnName = "FIRST_ID " ) )
private ClassB var1;"
致以诚挚的问候