У меня есть следующий случай, когда у меня есть два класса/таблицы:Как указать фиксированный параметр для сопоставления соединения в спящем режиме?
public class Parent {
@Id
@Column(name="parent_id")
private Integer parentId;
@ManyToOne
@JoinColumn(name="child_id") //Notice here that i only specified one of the two id columns of the Child class
private Child child;
...
}
public class Child {
@Id
@Column(name="child_id")
private Integer childId;
@Id
@Column(name="alive")
private Boolean alive;
@Column(name="name")
private String name;
}
Как вы можете видеть, child
имеет два первичных ключей, что означает, что я могу иметь такую же child_id
в два ряда, один с alive=true
и другой с alive=false
, но я не атрибут alive
на родителя:
PARENT TABLE
parent_id | child_id
--------------------
500 | 1
CHILD TABLE
child_id | alive | name
--------------------------
1 | TRUE | DONALD
1 | FALSE | HILLARY
Я хочу гибернации для создания объединения пункт вставки атрибута alive
, только тогда, когда alive=true
, для EXA mple:
select * from Parent inner join Child on Child.child_id=Parent.child_id and Child.alive=true
Есть ли способ сделать это, поэтому, когда я выполнить запрос как select p from Parent p
он выполняет запрос, как ожидалось?
Что вы имеете в виду 'вставив живой атрибут, только при жизни = true'? Разве «живое» не заполняется уже при поиске «alive = true»? –
Что я имею в виду, если я запускаю запрос HQL, например 'select p from Parent p', sql, сгенерированный hibernate, не будет включать атрибут' alive' в разделе join (как и должно быть, потому что я не включил отображение атрибута 'alive', когда я задал' @ JoinColumn' в классе 'Parent'), например:' ... from Parent p internal join Child c on c.child_id = p.child_id'. Я хочу, чтобы спящий режим сгенерировал SQL-запрос с помощью 'alive = true' в разделе соединения. –
Для класса родителя вы можете использовать @JoinColumnOrFormula (formula = @ JoinFormula (value = "(SELECT a.id FROM Child c WHERE c.childd_id = child_id и alive = true)", referendedColumnName = "child_id") – StanislavL