我有一个Person类和一个Car类。
class Person {
long id;
Set<Car> cars;
}
class Car{
long id;
Person owner;
boolean isSold;
}
em.createQuery("SELECT P FROM Person P WHERE P.id = 1")
将返回一个拥有所有车辆的人。
但是,我想找一个身份1的人,他们的车尚未售出。
我怎样才能做到这一点?
答案 0 :(得分:0)
你可以通过两种方式获得:
1.创建另一个SQL查询:
<data_type>
2.创建getter和setter
SELECT c.id, c.idOwner, c.isSold FROM Person p join Car c on p.id = c.carId where c.isSold = false and p.id = 1;
现在您可以将结果归于Person对象。
class Person {
long id;
Set<Car> cars;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public Set<Car> getCars() {
return cars;
}
public void setCars(Set<Car> cars) {
this.cars = cars;
}
}
答案 1 :(得分:0)
首先,您必须正确映射实体。我想你是这样做的,但是如果你还没有这样做,下面的映射可能会达到目的:
@Entity
class Person {
@Id @GeneratedValue private long id;
@OneToMany(mappedBy = "owner")
Set<Car> cars;
// getters and setters
}
@Entity
class Car{
@Id @GeneratedValue private long id;
@ManyToOne
@JoinColumn( name = "owner_id")
Person owner;
boolean isSold;
// Getters and Setters
}
查询:
String queryString = "SELECT p FROM Person p join p.cars c where c.isSold = false and p.id = 1";
TypedQuery<Person> q = em.createQuery(queryString, Person.class);
Person p = q.getSingleResult();
Set<Car> unsoldCars = p.getCars();
// Don't forget exception handling
此查询将返回具有id = 1
的人以及该人拥有并且未售出的所有车辆。