Blue
Blue

Reputation: 1939

please help me with HQL Join query

I'm new to hibernate.

I have the following classes:

@Entity
@Table( name = "Users" )
public class User implements Serializable{

private static final long serialVersionUID = -3550174731709532722L;

private String userName;
private String pasportID;
private Company company; 
private String name;
private String email;
private String phone1;
private String phone2;
private String password; //may be null/empty , will be kept hashed
private boolean isAdmin;
private Date lastLogin;


User() {} //not public on purpose!


public User(String userName, String pasportID, Company company,
        String name, String email, String phone1, String phone2,
        String password, boolean isAdmin) {
    this.userName = userName;
    this.pasportID = pasportID;
    this.company = company;
    this.name = name;
    this.email = email;
    this.phone1 = phone1;
    this.phone2 = phone2;
    this.password = password;
    this.isAdmin = isAdmin;
}


@Id
public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

@OneToOne(cascade = CascadeType.ALL)
public Company getCompany() {
    return company;
}

public void setCompany(Company company) {
    this.company = company;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}

public String getPhone1() {
    return phone1;
}
public void setPhone1(String phone1) {
    this.phone1 = phone1;
}

public String getPhone2() {
    return phone2;
}
public void setPhone2(String phone2) {
    this.phone2 = phone2;
}

public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}

public boolean isAdmin() {
    return isAdmin;
}

public void setAdmin(boolean isAdmin) {
    this.isAdmin = isAdmin;
}

@Temporal(TemporalType.TIMESTAMP) 
public Date getLastLogin() {
    return lastLogin;
}

public void setLastLogin(Date lastLogin) {
    this.lastLogin = lastLogin;
}


public String getPasportID() {
    return pasportID;
}


public void setPasportID(String pasportID) {
    this.pasportID = pasportID;
    }
}

And:

@Entity
@Table( name = "COMPANIES" )
/**
 * This class is an entity class that represent the company object in the database.
 * This class holds no logic, only getters, setter and constructors.
 */
public class Company implements Serializable {


    private static final long serialVersionUID = -4809404779999217296L;

    private long companyID;
    private CompanyType companyType;
    private String name;

    Company() {} //not public on purpose!

    public Company(String name, CompanyType companyType) {
        this.companyType = companyType;
        this.name = name;
    }


    @Id
    @GeneratedValue(generator="increment")
    @GenericGenerator(name="increment", strategy = "increment")
    public long getCompanyID() {
        return companyID;
    }
    public void setCompanyID(long companyID) {
        this.companyID = companyID;
    }

    @Enumerated(EnumType.STRING)
    public CompanyType getCompanyType() {
        return companyType;
    }
    public void setCompanyType(CompanyType companyType) {
        this.companyType = companyType;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

And the enum:

public enum CompanyType { A,B,C //TODO }

I want to get a list of all the users that work in company "companyName". please nitice that User contains a refference to Company.

I'm quite sure a join query is required, but I can't seem to nail the syntax.

I would very much appriciate your help with that.

Thanks!

Upvotes: 0

Views: 103

Answers (1)

Ram Reddy
Ram Reddy

Reputation: 123

First of all change the mapping from user to company to from ..as many users can belong to one comapny.

<many-to-one name="company>
</many-to-one>

Then you can use the following query. "from user u left outer join u.company where u.company.companyName='XYZ'"

Upvotes: 1

Related Questions