JPA自联接错误

时间:2012-02-16 08:05:37

标签: jpa-2.0 eclipselink

我的实体出错了,我的表是:

LANGUAGE

  

codLanguage(主键)
  nameLanguage

设备

  

idDevice(主键)
nameDevice

  

idPhraseGroup(主键)
codlanguage(主键)
idDevice   (主键)
tex

我的实体短语有问题,它是:

public class Phrase implements Serializable { 

    @EmbeddedId 
    private PhraseKey idPhrase; 

    private String text;

   //etc 
  //here my problem (*)

   @OneToMany(mappedBy="idPhrase.idPhraseGroup",fetch=FetchType.EAGER)   
    @JoinColumn(name = "idPhrase.idPhraseGroup", updatable = false, insertable = false,  referencedColumnName = "idPhrase.idPhraseGroup") 
    private List<Phrase> groupListPhrase; 
}

@Embeddable
public class PhraseKey implements Serializable { 

private Integer idPhraseGroup;
private String codLanguage;
private String idDevice;
---getter e setter 


}

我想获得具有相同idPhraseGroup的短语列表 例如在短语表中:

  

idPhraseGroup | codLang | idDevice |文字

     

1 | ES | 1 |梅萨

     

1 | EN | 1 |表

..但我有这个错误:

  

异常说明:遇到了不兼容的映射   这通常发生在映射的基数没有时   与其backpointer的基数相对应

Thanxs

1 个答案:

答案 0 :(得分:0)

我不明白你为什么需要这个映射,或者它是如何工作的。您不能在oneToMany上的mappedBy中使用基本映射“idPhrase.idPhraseGroup”字段,因为它不描述关系。 oneToMany通常依赖于另一方拥有manyToOne,但在这种情况下你不会。

如果你想要的只是具有特定idPhaseGroup的短语实体的集合,只需使用以下方法查询它: em.createQuery(“从p中选择p,其中p.idPhrase.idPhraseGroup =:phaseGroup”)。setParameter(“phaseGroup”,phaseGroupId);

我会删除映射,除非你真的需要在Phaze实体中缓存​​它。如果你这样做,它会更好地映射如下: @OneToMany @JoinColumn(name =“IDPHASEGROUP”,referencedColumnName =“IDPHASEGROUP”,insertable = false,updatable = false) private List groupListPhrase;