我的实体角色中的代码
@Embedded
@LazyCollection(LazyCollectionOption.FALSE)
@CollectionOfElements
@JoinTable(name = "TEST_TABLE", joinColumns = @JoinColumn(name = "ROLE_ID"))
@AttributeOverrides({
@AttributeOverride(name = "code", column = @Column(name = "TSTCODE")),
@AttributeOverride(name = "work", column = @Column(name = "TSTWRK"))
})
private List<TestID> tests;
}
TestID类别
@Embeddable
@AccessType("field")
public class TestID implements Serializable
{
private String code;
private String work;
// getters, setters
}
获取异常SQLGrammarException
Caused by: java.sql.SQLException: ORA-00904: "TESTS0_"."WORK": invalid identifier
实体管理器创建查询,以尝试访问@Column批注中的CODE和WORK列而不是TSTCODE和TSTWRk。
有任何想法吗?
休眠注释3.2.1.ga
持续性API 1.0
jboss-4.2.3.GA
更新:
如果将TestID类中的字段重命名为表的列名,则所有正常
@Embeddable
@AccessType("field")
public class TestID implements Serializable
{
private String tstcode;
private String tstwks;
最佳答案
删除@CollectionOfElements
并仅使用@Embedded
。我认为您正在像现在这样对它进行双重映射。而且,JPA的@ElementCollection
是recommended over Hibernate的@CollectionOfElements
。
更新:我有点想念您正在映射一组组件的事实。您需要在@Column(name="...")
的字段中添加TestID
,以使其在这种情况下可以正确映射。尽管这与嵌入式组件的工作方式有些相反,但这是我知道的唯一方法。