我使用hibernate 4。我在写一个过滤器。我注意到的奇怪的事情是,如果我使用session.get()方法
,过滤器不会被应用public SecurityAgency getSecurityAgencyById(int id) {
Session session = this.sessionFactory.getCurrentSession();
session.enableFilter("byEnabled");
SecurityAgency s = (SecurityAgency)session.get(SecurityAgency.class, new Integer(id));
return s;
}
Filter在我替换会话后立即开始工作。使用会话获取方法。方法并发送一个HQL查询。我无法在hibernate文档中找到这种行为的任何原因。
安全代理类中的过滤器声明
@Entity
@Table(name="security_agency")
public class SecurityAgency implements java.io.Serializable {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name="name")
private String name;
@Column(name="code")
private String code;
@Column(name="website")
private String website;
@Column(name="tan")
private String tan;
@Column(name="email")
private String email;
@Column(name="pan")
private String pan;
@Column(name="created_at")
private Date createdAt;
@Column(name="created_by")
private long createdBy;
@Column(name="modified_at")
private Date modifiedAt;
@Column(name="modified_by")
private long modifiedBy;
@OneToMany(mappedBy="securityAgency",fetch = FetchType.EAGER)
@JsonIgnoreProperties("securityAgency")
@Filter(name = "byEnabled", condition = "is_enabled= 1")
private Set<ContactPerson> contactPersons = new HashSet<ContactPerson>(0);
public SecurityAgency() {
}
联系人类
@Entity
@Table(name = "contact_person")
@FilterDefs({
@FilterDef(name="byEnabled"),
@FilterDef(name="bySecurityAgency",parameters = @ParamDef(name="agency_id", type="int"))
})
@Filters({
@Filter(name="byEnabled", condition = "is_enabled = 1"),
@Filter(name="bySecurityAgency", condition = "agency_id= :agency_id ")
})
public class ContactPerson implements java.io.Serializable {
如果您正在使用id值获取,则过滤器不起作用。使用查询接口代替。查看这个线程
如果你想使用表列值,你需要使用过滤器连接表(@FilterJoinTable), @Filter应用于目标实体而不是表
,
@FilterJoinTable(name = "byEnabled", condition = "is_enabled= :enabled")
private Set<ContactPerson> contactPersons = new HashSet<ContactPerson>(0);
得到
session.enableFilter("byEnabled").setParameter("enabled", Integer.valueOf(1));