gpt4 book ai didi

java - AttributeOverride 和 CollectionOfElements,忽略列注释

转载 作者:行者123 更新时间:2023-11-29 06:00:21 25 4
gpt4 key购买 nike

来 self 的实体角色的代码

   @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;
}

测试ID类

@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   

实体管理器创建查询,试图访问列 CODE 和 WORK,而不是 @Column 注释中的 TSTCODE 和 TSTWRk。
有什么想法吗?

Hibernate-annotation 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 的 @ElementCollectionrecommended over Hibernate 的 @CollectionOfElements

更新:我有点想念您正在映射一组组件这一事实。您需要将 @Column(name="...") 添加到您的 TestID 中的字段,以使其在这种情况下正确映射。尽管这与嵌入式组件的工作方式有些背道而驰,但这是我所知道的唯一方式。

关于java - AttributeOverride 和 CollectionOfElements,忽略列注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10383607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com