JPA Самостоятельная ошибка соединения - PullRequest
0 голосов
/ 16 февраля 2012

У меня ошибка с сущностями, мои таблицы:

ЯЗЫК

codLanguage (первичный ключ)nameLanguage

Устройство

idDevice (первичный ключ)nameDevice

PHRASE

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 |таблица

.. но у меня есть эта ошибка:

Исключение Описание: Обнаружено несовместимое отображение Это обычно происходит, когда мощность отображения не соответствуетс кардинальным числом его обратного указателя

Спасибо

1 Ответ

0 голосов
/ 16 февраля 2012

Я не понимаю, зачем вам нужно отображение или как оно может работать.Вы не можете использовать поле основного отображения «idPhrase.idPhraseGroup» в mappedBy на oneToMany, потому что оно не описывает отношения.OneToMany обычно полагается на другую сторону, имеющую заднюю часть manyToOne, но в этом случае вы этого не делаете.

Если все, что вам нужно, - это набор сущностей Phrase с определенной группой idPhaseGroup, просто запросите ее, используя: em.createQuery("выберите p из Phase p, где p.idPhrase.idPhraseGroup =: phaseGroup"). setParameter ("phaseGroup", phaseGroupId);

Я бы удалил отображение, если оно действительно не требуется кэшировать в объекте Phaze.Если вы это сделаете, это будет лучше сопоставлено как: @OneToMany @JoinColumn (name = "IDPHASEGROUP", referencedColumnName = "IDPHASEGROUP", inserttable = false, updatable = false) private List groupListPhrase;

...