【发布时间】:2019-05-04 18:11:32
【问题描述】:
我正在尝试实现多租户。 目前我有以下实体:
@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 在zones 列表中有对应的zoneValue。使用当前实现 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 的异常。
那么,我如何按区域的值过滤学生?是否可以通过使用休眠过滤器来做到这一点?
可能,我必须在FilterDef 中输入正确的类型,但是当我写Zone 时,Hibernate 会抛出无法确定此类类型的异常。
【问题讨论】:
标签: java hibernate jpa multi-tenant