我的实体角色中的代码

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

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

07-27 21:39