Я хочу использовать аннотации Hibernate для представления однонаправленного отношения "один ко многим" с использованием соединения. Я хочу добавленное условие для соединения, поэтому это происходит только тогда, когда столбец в исходной таблице ( "один" ) равен постоянному значению. Например.
SELECT *
FROM buildings b
LEFT JOIN building_floors bf on bf.building_id = b.id AND b.type = 'OFFICE'
Я хочу представить часть b.type = 'OFFICE'
этого запроса.
Мой вопрос очень похож на этот, за исключением того, что у меня есть условие в исходной таблице. JPA/Hibernate присоединяются к постоянному значению
Объекты Java выглядят следующим образом:
@Entity
@Table(name = "buildings")
public class Building {
@Id
@Column(name = "id")
private int id;
@Column(name = "type")
private String type;
@OneToMany(mappedBy = "buildingId",
fetch = FetchType.EAGER,
cascade = {CascadeType.ALL},
orphanRemoval = true)
@Fetch(FetchMode.JOIN)
// buildings.type = 'OFFICE' ????
private Set<BuildingFloors> buildingFloors;
// getters/setters
}
@Entity
@Table(name = "building_floors")
public class BuildingFloor {
@Id
@Column(name = "building_id")
private int buildingId;
@Id
@Column(name = "floor_id")
private int floorId;
@Column(name = "description")
private String description;
// getters/setters
}
Я пробовал несколько вещей, где у меня есть этот комментарий к заполнителю:
@Where аннотация
Это не работает, поскольку это относится к целевому объекту.
аннотация @JoinColumns
@JoinColumns({
@JoinColumn(name = "building_id", referencedColumnName = "id"),
@JoinColumn(name = "'OFFICE'", referencedColumnName = "type")
})
Это не работает, потому что я получаю следующую ошибку (упрощенную для ясности): Syntax error in SQL statement "SELECT * FROM buildings b JOIN building_floors bf on bf.building_id = b.id AND bf.'OFFICE' = b.type"
Разная аннотация @JoinColumns
@JoinColumns({
@JoinColumn(name = "building_id", referencedColumnName = "id"),
@JoinColumn(name = "buildings.type", referencedColumnName = "'OFFICE'")
})
Это не работает, потому что при использовании однонаправленного отношения OneToMany ссылочное имяColumnName происходит из исходной таблицы. Поэтому я получаю сообщение об ошибке: org.hibernate.MappingException: Unable to find column with logical name: 'OFFICE' in buildings
Спасибо заранее!