【发布时间】:2013-11-01 11:11:21
【问题描述】:
我有两个实体 AddressEntity 和 CompanyEntity。
地址实体
@Entity
@Table(name = "address")
public class AddressEntity implements Serializable {
private static final long serialVersionUID = 6149442393833549397L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
@Column(name = "city", nullable = false)
private String city;
@Column(name = "post")
private String post;
@Column(name = "street", nullable = false)
private String street;
@Column(name = "building_nr", nullable = false)
private Integer buildingNr;
@Column(name = "flat_nr")
private Integer flatNr;
// setters and getters
}
公司实体
@Entity
@Table(name = "company")
public class CompanyEntity implements Serializable {
private static final long serialVersionUID = 3635072833730133590L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
@OneToOne
@Cascade(CascadeType.ALL)
private AddressEntity address = new AddressEntity();
@OneToMany(mappedBy = "company")
@Cascade(CascadeType.ALL)
private Set<DescriptionEntity> descriptions = new HashSet<DescriptionEntity>();
@OneToMany(mappedBy = "company")
@Cascade(CascadeType.ALL)
private List<EmployeeEntity> employees = new ArrayList<EmployeeEntity>();
}
我想select all addresses which are used by companies 就像在这个 SQL 查询 SELECT a.city, c.name FROM address a INNER JOIN company c ON c.address_id=a.id; 中一样,但使用 HQL 查询(我想使用 JOIN,而不是 WHERE)。我该怎么做?我想使用地址表而不是公司表来选择地址。我知道我可以使用像 select c.address.city, c.name from CompanyEntity c 这样的公司表或使用 WHERE select a.city, c.name from CompanyEntity c, AddressEntity a WHERE c.address.id=a.id 来选择地址。
【问题讨论】:
-
如果您想使用地址表选择公司使用的地址,您需要在地址实体中添加地址和公司之间的关系
-
@pepuch 你为什么不写标准?
-
我是 Hibernate 的新手。你能写出你的想法如何解决这个问题吗?