简体   繁体   中英

hibernate filter not working in the case of session.get() but working in the case of session.createQuery()

I am using hibernate 4. I am writing a filter. The strange thing I noticed is the filter is not getting applied if I use session.get() method

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 starts working as soon as I replace the session.get method with session.createQuery method and send a HQL query. I am unable to find any reason for this behaviour in the hibernate documentation.

FIlter declaration in securtiy agency class

@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() {
}

Contact person class

@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 {

Filter doesn't work if you are fetching using id value.Use Query interface instead. See this thread

if you want to use table column values you need to use filter join table ( @FilterJoinTable ), @Filter is applied to target entity rather than table

try,

@FilterJoinTable(name = "byEnabled", condition = "is_enabled= :enabled")
private Set<ContactPerson> contactPersons = new HashSet<ContactPerson>(0);

get

 session.enableFilter("byEnabled").setParameter("enabled",  Integer.valueOf(1));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM