Предположим, у нас есть две сущности, первые один:@OneToOne отношения с дополнительным ограничением
@Entity
@Table(name = "entitya")
public class EntityA {
@Id
@Column(name = "id")
private Long id;
@Column(name = "name")
private Long name;
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY)
private Set<EntityB> childEntities;
}
и вторая:
@Entity
@Table(name = "entityb")
public class EntityB {
@Id
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@Column(name = "master")
private Boolean master;
@ManyToOne
@JoinColumn(name = "parent")
private EntityA parent;
}
До сих пор, так хорошо. Однако основные таблицы базы данных и ограничения приводят к соблюдению того, что для любого entityA
может быть только один EntityB
с булевым полем master
, установленным в true. Я могу извлечь его, добавив следующий метод entityA:
public entityB getMasterChild() {
for(entityB ent : childEntities) {
if(ent.isMaster()) {
return ent;
}
}
}
Вопрос заключается в том, могу ли я создать @OneToOne
отношения в EntityA
, которые могут выразить это правило, так что entityA
может иметь дополнительный masterChild
элемент типа entityB?
Мне очень не нравится такая модификация, но я думаю, что это цена, которую вы платите за использование пакета ORM –