vendredi 17 juin 2016

Hibernate : Criteria giving null back for disjunction, even though data exists with matching params

I am working on a Spring-MVC project in which I am using Hibernates Criteria functionality for search. Currently, for testing I am trying out the search code with disjunction. Even with it, I am getting null back from the criteria query. I have added 5000 random rows and if nothing atleast the boolean values match in the database. But I don't have results. Any ideas?

Code :

@Override
    public List<Student> getRecommendedStudents(Host host) {
        Session session = this.sessionFactory.getCurrentSession();
        Criteria andCriteria = session.createCriteria(Student.class);
        Disjunction and = Restrictions.disjunction();
        if ((host.getCity() != null) && (!(host.getCity().isEmpty()))) {
            and.add(Restrictions.ilike("city", host.getCity()));
        }
        if ((host.getGender() != null) && (!(host.getGender().isEmpty()))) {
            and.add(Restrictions.ilike("gender", host.getGender()));
        }
        if ((host.getMotherTongue() != null) && (!(host.getMotherTongue().isEmpty()))) {
            and.add(Restrictions.ilike("motherTongue", host.getMotherTongue()));
        }

        if (host.getOtherLanguages() != null) {
            if (!(host.getOtherLanguages().isEmpty())) {
                and.add(Restrictions.in("otherLanguages", host.getOtherLanguages()));
            }
        }
        and.add(Restrictions.eq("drivingLicense", host.isDrivingLicense()));
        and.add(Restrictions.eq("smoker", host.isWeSmoke()));
        and.add(Restrictions.eq("previouslyAuPair", host.isPreviousAuPair()));
        and.add(Restrictions.eq("willingToWork", host.isHouseWork()));
        and.add(Restrictions.eq("workForSingleParent", host.isSingleParent()));
        and.add(Restrictions.eq("workingForDisabledChild", host.isChildAssistance()));
        andCriteria.add(and);
        return andCriteria.list();
    }

Database random data screenshot :

enter image description here

I don't have any errors, just no results. Thank you.

Edit

Model files for Student and Host :

@Entity
@Table(name="student")
public class Student implements UserDetails,Serializable{

    private static final GrantedAuthority USER_AUTH = new SimpleGrantedAuthority("ROLE_STUDENT");

    @Id
    @Column(name="studentid")
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "student_seq_gen")
    @SequenceGenerator(name = "student_seq_gen",sequenceName = "student_seq")
    private Long studentid;

    @Column(name = "email",columnDefinition = "character varying")
    private String email;

    @Column(name = "password",columnDefinition = "character varying")
    private String password;

    @Column(name = "firstname",columnDefinition = "character varying")
    private String firstName;

    @Column(name = "lastname",columnDefinition = "character varying")
    private String lastName;

    @Column(name = "registrationdate",columnDefinition = "timestamp without time zone")
    private Timestamp registrationDate;

    @Column(name = "profilevisits",columnDefinition = "integer default 0")
    private int profileVisits;

    @Column(name = "sentapplications",columnDefinition = "integer default 0")
    private int sentapplications;

    @Column(name = "recievedapplication",columnDefinition = "integer default 0")
    private int recievedApplications;

    @Column(name = "country",columnDefinition = "character varying")
    private String country;

    @Column(name = "city",columnDefinition = "character varying")
    private String city;

    @Column(name = "gender",columnDefinition = "character varying")
    private String gender;

    @Column(name = "role",columnDefinition = "character varying")
    private String role;

    @Column(name = "spam_count",columnDefinition = "integer default 0")
    private int spamCount;

    @Column(name = "socialregister",columnDefinition = "boolean default false")
    private boolean socialRegistrationFlag;

    @Column(name = "socialnetwork",columnDefinition = "character varying")
    private String socialNetwork;

    @Column(name = "agency_flag",columnDefinition = "boolean default false")
    private boolean agencyFlag;

    @Column(name = "account_enabled",columnDefinition = "boolean default true")
    private boolean accountEnabled;

    @Column(name = "street",columnDefinition = "character varying")
    private String streetName;

    @Column(name = "PLZ",columnDefinition = "character varying")
    private String postLeitZahl;

    @Column(name = "nationality",columnDefinition = "character varying")
    private String nationality;

    @Column(name = "birthday",columnDefinition = "date")
    private Date studentBirthday;

    @Column(name = "free_text",columnDefinition = "character varying")
    private String freeText;

    @Column(name = "phonenumber",columnDefinition = "character varying")
    private String phoneNumber;

    @Column(name = "mothertongue",columnDefinition = "character varying")
    private String motherTongue;

    @Column(name = "regionlookingfor",columnDefinition = "character varying")
    private String desiredRegion;

    @Column(name = "citylookingfor",columnDefinition = "character varying")
    private String desiredCity;

    @Column(name = "smoker",columnDefinition = "boolean default false")
    private boolean smoker;

    @Column(name = "willingtowork",columnDefinition = "boolean default false")
    private boolean willingToWork;

    @Column(name = "drivinglicense",columnDefinition = "boolean default false")
    private boolean drivingLicense;

    @Column(name = "workfordisabledchild",columnDefinition = "boolean default false")
    private boolean workingForDisabledChild;

    @Column(name = "workforsingleparent",columnDefinition = "boolean default false")
    private boolean workForSingleParent;

    @Column(name = "previousaupair",columnDefinition = "boolean default false")
    private boolean previouslyAuPair;

    @Column(name = "prep_days",columnDefinition = "integer default 0")
    private int prepDays;

    @Column(name = "start_date",columnDefinition = "date")
    private Date startDate;

    @Column(name = "vegeterian",columnDefinition = "boolean default false")
    private boolean vegeterian;

    @Column(name = "look_smoker",columnDefinition = "boolean default false")
    private boolean lookSmoker;

    @Column(name = "look_vegeterian",columnDefinition = "boolean default false")
    private boolean lookVegeterian;

    @Column(name = "look_for_mother_tongue",columnDefinition = "character varying")
    private String lookForMotherTongue;

    @ElementCollection(fetch = FetchType.EAGER)
    @Fetch(FetchMode.SUBSELECT)
    private List<String> expectedLanguages = new ArrayList<>();

    @ElementCollection(fetch=FetchType.EAGER)
    @Fetch(FetchMode.SUBSELECT)
    private List<String> otherLanguages = new ArrayList<>();

    @ElementCollection(fetch = FetchType.EAGER)
    @Fetch(FetchMode.SUBSELECT)
    private List<String> desiredCountries = new ArrayList<>();
    // Getters and setters
}

Host :

@Entity
@Table(name = "host")
public class Host implements UserDetails{

    private static final GrantedAuthority USER_AUTH = new SimpleGrantedAuthority("ROLE_HOST");

    @Id
    @Column(name="hostid")
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "host_seq_gen")
    @SequenceGenerator(name = "host_seq_gen",sequenceName = "host_seq")
    private Long hostid;

    @Column(name = "firstname",columnDefinition = "character varying")
    private String firstName;

    @Column(name = "lastname",columnDefinition = "character varying")
    private String lastName;

    @Column(name = "password",columnDefinition = "character varying")
    private String password;

    @Column(name = "email",columnDefinition = "character varying")
    private String email;

    @Column(name = "role",columnDefinition = "character varying")
    private String role;

    @Column(name = "spam_count",columnDefinition = "integer default 0")
    private int spamCount;

    @Column(name = "socialregister",columnDefinition = "boolean default false")
    private boolean socialRegistrationFlag;

    @Column(name = "socialnetwork",columnDefinition = "character varying")
    private String socialNetwork;

    @Column(name = "gender",columnDefinition = "character varying")
    private String gender;

    @Column(name = "agency_flag",columnDefinition = "boolean default false")
    private boolean agencyFlag;

    @Column(name = "account_enabled",columnDefinition = "boolean default true")
    private boolean accountEnabled;

    @Column(name = "registration_timestamp",columnDefinition = "timestamp without time zone")
    private Timestamp registrationTimeStamp;

    @Column(name = "street",columnDefinition = "character varying")
    private String streetName;

    @Column(name = "country",columnDefinition = "character varying")
    private String country;

    @Column(name = "PLZ",columnDefinition = "character varying")
    private String postLeitZahl;

    @Column(name = "nationality",columnDefinition = "character varying")
    private String nationality;

    @Column(name = "birthday",columnDefinition = "date")
    private Date Birthday;

    @Column(name = "free_text",columnDefinition = "character varying")
    private String freeText;

    @Column(name = "profilevisits",columnDefinition = "integer default 0")
    private int profileVisits;

    @Column(name = "profileupdated")
    private Timestamp profileUpdated;

    @Column(name = "aboutus",columnDefinition = "character varying")
    private String aboutUs;

    @Column(name = "city",columnDefinition = "character varying")
    private String city;

    @Column(name = "phonenumber",columnDefinition = "character varying")
    private String phoneNumber;

    @Column(name = "children",columnDefinition = "integer default 0")
    private int children;


    @Column(name = "mothertongue",columnDefinition = "character varying")
    private String motherTongue;


    @Column(name = "wesmoke",columnDefinition = "boolean default false")
    private boolean weSmoke;

    @Column(name = "agerange",columnDefinition = "character varying")
    private String ageRange;

    @Column(name = "timeframe",columnDefinition = "character varying")
    private String timeFrame;

    @Column(name = "startdate")
    private Timestamp startDate;

    @Column(name = "enddate")
    private Timestamp endDate;

    @Column(name = "drivinglicense",columnDefinition = "boolean default false")
    private boolean drivingLicense;

    @Column(name = "housework",columnDefinition = "boolean default false")
    private boolean houseWork;

    @Column(name = "previousaupair",columnDefinition = "boolean default false")
    private boolean previousAuPair;

    @Column(name = "childassistance",columnDefinition = "boolean default false")
    private boolean childAssistance;

    @Column(name = "singleparent",columnDefinition = "boolean default false")
    private boolean singleParent;

    @Column(name = "look_smoke",columnDefinition = "boolean default false")
    private boolean lookSmoke;

    @Column(name = "low_age_range",columnDefinition = "integer default 0")
    private int lowAgeRange;

    @Column(name = "high_age_range",columnDefinition = "integer default 0")
    private int highAgeRange;

    @Column(name = "vegeterian",columnDefinition = "boolean default false")
    private boolean vegeterian;

    @Column(name = "look_vegeterian",columnDefinition = "boolean default false")
    private boolean lookVegeterian;

    @Column(name = "look_for_mother_tongue",columnDefinition = "character varying")
    private String lookForMotherTongue;

    @LazyCollection(LazyCollectionOption.FALSE)
    @Fetch(FetchMode.SUBSELECT)
    @ElementCollection
    private List<String> expectedLanguages = new ArrayList<>();

    @LazyCollection(LazyCollectionOption.FALSE)
    @ElementCollection
    @Fetch(FetchMode.SUBSELECT)
    private List<String> expectedCountries = new ArrayList<>();

    @LazyCollection(LazyCollectionOption.FALSE)
    @ElementCollection
    @Fetch(FetchMode.SUBSELECT)
    private List<String> otherLanguages = new ArrayList<>();

// Getters and setters
}

Aucun commentaire:

Enregistrer un commentaire