hibernate过滤器在session.get()的情况下不起作用,但在session.createQuery()的情



我使用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));

相关内容

最新更新