У меня есть 2 класса java, Relation
и Person
, которые оба присутствуют в моей базе данных.Аннотации для объединения столбцов с условием ИЛИ вместо условия И
лицо:
@Entity
@Table(name = "persons")
public class Person {
@Id
@Column
private int id;
@Column
private String name;
@OneToMany(fetch = FetchType.EAGER)
@JoinColumns({
@JoinColumn(name = "slave_id", referencedColumnName="id"),
@JoinColumn(name = "master_id", referencedColumnName="id")
})
private List<Relation> relations;
//Getters and setters
}
отношений:
@Entity
@Table(name = "relations")
public class Relation {
@Id
@Column
private int id;
@Column
private int child_id;
@Column
private int parent_id;
@Column
private String type;
//Getters and setters
}
Каждый человек имеет список отношений (или нет), то соотношение должно быть добавлено к списку, когда child_id или parent_id из отношение равно id человека.
TL; DR: При relation.child_id OR relation.parent_id = person.id
=> добавить отношение к списку отношений к человеку
Проблема я столкнулся в том, что эта аннотация:
@JoinColumns({
@JoinColumn(name = "child_id", referencedColumnName="id"),
@JoinColumn(name = "parent_id", referencedColumnName="id")
})
создает следующий SQL (только необходимые часть):
relations relations6_
on this_.id=relations6_.slave_id
and this_.id=relations6_.master_id
Как правильно аннотаций в Java Hibernate, чтобы генерировать оператор SQL, говоря ИЛИ вместо И
Оба, входящие в формулу, и Subselect кажутся перспективными. Но мне больше не нравится писать SQL в этих аннотациях, поэтому я продолжаю искать ответ, который подходит для этого вопроса. – STheFox
@STheFox В этом случае, пожалуйста, см. Мой обновленный ответ. Во всяком случае, нет никаких аннотаций, специально разработанных для вашего дела; вам придется использовать некоторые обходные пути. –
Да, мне удалось получить 2 списка, но я искал для написания лучшего и более чистого кода. Мой код был похож на ваш код. Разве нет аннотации, чтобы сделать это сразу? – STheFox