Reputation: 1939
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
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