JPA / HIbernate: объединение двух организаций несколько раз - PullRequest
2 голосов
/ 09 июля 2011

У меня есть устаревшая база данных, которую нельзя изменить, поскольку она подключена к стороннему приложению.

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

SELECT COL1, COL2, COL3, CODE1, CODE2, (SELECT CODE_DESC FROM CODETABLE WHERE CODE_TYPE='A' CODE=INCIDENT.CODE1) AS CODE_DESC1, (SELECT CODE_DESC FROM CODETABLE WHERE CODE_TYPE='B' CODE=INCIDENT.CODE2) AS CODE_DESC2 FROM INCIDENT WHERE...

Я пытаюсь выяснить, как перевести этот запрос в набор объектов Hibernate, но я новичок в Hibernate. У меня 3 вопроса:

  1. Как я могу присоединить сущность к другой сущности в отношениях один к одному несколько раз? (подзапросы)
  2. Как мне присоединить объект к другому объекту в отношении один-к-одному, используя, из-за отсутствия лучшего слова, параметр с фиксированным значением (CODE_TYPE = 'A')?
  3. Можно ли сделать что-либо из перечисленного выше, используя аннотации (потому что они мне нравятся)?

Вот что я пробовал до сих пор, но это не сработало:

Объект 1: @Entity @Table (name="Incident") public class Incident { private String col1; private String col2; private String col3; private String code1; private String code2; private Code code_desc1; //private String code_desc2; /** * @param code_desc1 the code_desc1 to set */ public void setCode_desc1(Code code_desc1) { this.code_desc1 = code_desc1; } /** * @return the code_desc1 */ @OneToOne @JoinTable(name="Codes", joinColumns=@JoinColumn(name="code1", referencedColumnName="CODE"), inverseJoinColumns=@JoinColumn(name="CODE_TYPE", referencedColumnName="'A'") ) public Code getCode_desc1() { return code_desc1; } // Rest of Getters & Setters... }

Объект 2: @Entity @Table (name="CODETABLE") public class Codes { @Column(name="CODE_DESC") private String codeDesc; @Column(name="CODE_TYPE") private String codeType; @Column(name="CODE") private String code; // Getters & Setters }

Обычно, когда я запускаю программу, она жалуется на то, что "A" не является именем столбца в сущности Codes. Спасибо за помощь!

1 Ответ

0 голосов
/ 14 июля 2011

Вы должны создать представление как запрос, который вы описали, и определить сопоставление сущности этому представлению.

Если вам все еще нужна сущность «Код», сопоставленная с «Инцидентом», проверьте следующий пример:

@Entity
@Table(name="incident")
public class Incident {
    @Id
    @Column(name="id")
    private Integer id;

    @OneToOne
    @JoinColumn(name="code1")
    private CodeA typeACode;
    @OneToOne
    @JoinColumn(name="code2")
    private CodeB typeBCode;

    public Incident() {}

    public CodeA getTypeACode() { return this.typeACode; }
    public CodeB getTypeBCode() { return this.typeBCode; }
}

«CodeA» - это объект, отображаемый в представление, которое соответствует CODE_TYPE = 'A' .Код "CodeB" такой же, как и в предыдущем рецепте.

...