Hibernate: создайте сопоставление для свойства по нескольким объединенным таблицам - PullRequest
0 голосов
/ 27 февраля 2012

У меня есть три таблицы (с именами A, B и C) в базе данных:

A
-----
ID
B_ID
-----
B
-----
ID
C_ID
-----
C
-----
ID
-----

Соответственно, у меня есть классы A, B и C.


public class A{
    private Long id;
    private Long b_id;
}

public class B{
    private Long id;
    private Long c_id;
}

public class C{
    private Long id;
}

Как видно из кода для класса "A", я сопоставил идентификатор класса B вместо объекта, а именно:


<property name="b_id" column="B_ID" type="java.lang.Long" not-null="false">

ТеперьМне нужно было бы сделать это и для идентификатора «C», т. Е. Чтобы я мог получить идентификатор ассоциированного с ним объекта C напрямую с помощью

a.getC_id();

Как мне достичьэтот?Это должно быть сделано для того, чтобы, когда Hibernate считывает объект A из базы данных, идентификатор C присоединяется к запросу, т. Е. Чтобы не было никаких дополнительных запросов или подзапросов (a.getB (). GetC_id () неприемлемо).

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

В качестве варианта ответа ManuPK вы также можете поместить экземпляр A в DTO.

public class AWithCID {
    public final A a;
    public final cID;
    public AWithCID(A a, Long cID) { this.a = a; this.cID = cID; }
}

select new AWithCID(a, b.cID) from A a, B b where a.bID = b.id
1 голос
/ 27 февраля 2012

Сначала создайте объект DTO,

public class ADTO {
    private Long a_id;
    private Long b_id;
    private Long c_id;
    public ADTO(Long a_id,Long b_id,Long c_id){
       this.a_id = a_id;
       this.b_id = b_id;
       this.c_id = c_id;
    }
}

Теперь используйте запрос,

select new com.foo.ADTO(a.id,b.id,c.id) from A a, B b, C c where a.id = b.a_id and b.id = c.b_id

Вы можете сделать это даже с классом A, которого я избегал, потому что я не уверен, что отношение между A и C идентифицируется как one to one или нет. DTO всегда в безопасности.

Прочитайте документацию API здесь или пример здесь о том, как вы можете настроить выбор HQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...