@OneToMany上的JPA查询设置<entity> </entity>

时间:2014-02-09 13:26:42

标签: java jpa

GenericVehicle表示可能具有0个或更多GenericVehicleAccessory的车辆。

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class GenericVehicle extends GenericEntity {

@Id
private Long id;

@Column(nullable=false)
@NotNull(message="{GenericVehicle.vehicleName.notNull")
@Size(max=128, message="{GenericVehicle.vehicleName.size")
private String vehicleName;

@OneToMany(mappedBy = "genericVehicle", cascade = { CascadeType.ALL }, orphanRemoval = true, fetch = FetchType.LAZY)
private Set<GenericVehicleAccessory> accessories;
// .. 
}


@Entity
@Table(name = "GENERICVEHICLEACCESSORIES")
public class GenericVehicleAccessory extends GenericEntity {

@Id
private long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "GENERICVEHICLE_ID")
private GenericVehicle genericVehicle;

private String name;

// ..
}

我想执行一个查询,选择所有拥有给定标准集的Set(附件)的GenericVehicle。

例如:

+----+-------------------+
| ID | VEHICLENAME       |
+----+-------------------+
|  1 | Toyota Auris      |
|  2 | Volkswagen Passat |
|  3 | Bentley Arnage    |
|  4 | Hyundai Accent    |
|  5 | Toyota Auris      |
+----+-------------------+
+-------------------+----------------------------------+
| GENERICVEHICLE_ID | NAME                             |
+-------------------+----------------------------------+
|                 1 | Leather seats                    |
|                 1 | Electronic stability control     |
|                 2 | Power steering                   |
|                 4 | ABS                              |
|                 4 | Airbag                           |
|                 4 | Cruise control                   |
|                 5 | Leather seats                    |
|                 5 | Electronic stability control     |
+-------------------+----------------------------------+

这样的标准:

criteria.setVehicleName="Toyota Auris";

new GenericVehicleAccessory tmp0 = new GenericVehicleAccessory();
tmp0.setName="Leather Seats";
new GenericVehicleAccessory tmp1 = new GenericVehicleAccessory();
tmp1.setName="Electronic stability control";
criteria.addToAccessory(tmp0);
criteria.addToAccessory(tmp1);

会选择ID = 1的GenericVehicle实体(因为ID = 5没有电子稳定控制)。

如何使用JPA Criteria API执行此操作?

0 个答案:

没有答案