Я пытаюсь реализовать мультитенантность.
В настоящее время у меня есть следующие лица:
@Data
@Entity
public class Zone {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "[NAME]")
private String name;
}
А Student
сущность:
@Data
@Entity
@Table(name = "[Student]")
@FilterDef(name = "zoneFilter", parameters = {@ParamDef(name = "zoneValue", type = "string")})
@Filter(name = "zoneFilter", condition = "zones.zone_id = :zoneValue")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "AGE")
private Integer age;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER)
@JoinTable(name = "student_zone", joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "zone_id"))
private List<Zone> zones;
}
Итак, я хотел бы получить только те Students
, которые имеют zoneValue
в списке zones
. В текущей реализации Hibernate генерирует следующий запрос:
select student0_.id as id1_0_, student0_.age as age2_0_, student0_.first_name as first_na3_0_, student0_.tenant_id as tenant_i4_0_ from [student] student0_ where zones.zone_id = ?
Таким образом, выдается исключение, что zones.zone_id
не может быть связан.
Итак, как я могу отфильтровать студентов по значениям зон? Возможно ли это сделать с помощью Hibernate Filter?
Возможно, мне нужно указать правильный тип в FilterDef
, но когда я пишу Zone
Hibernate выдает исключение, что он не может определить такой тип.