Tin*_*iny 5 many-to-many hibernate jpa eclipselink jpa-2.1
我正在使用具有JPA 2.1的EclipseLink 2.5.1(和Hibernate 4.3.5最终版)。给定MySQL中的下表。
产品及其颜色之间存在多对多的关系。
产品可以具有多种颜色,而颜色又可以与多种产品相关联。这些表在数据库中表达了这种关系。
该prod_colour表有两个参考列prod_id,并colour_id从相关的父表product和colour分别。
显而易见,实体类Product具有一个颜色列表- java.util.List<Colour>名为colourList。
实体类Colour具有产品列表- java.util.List<Product>名为productList。
Colour实体中的关系:
public class Colour implements Serializable {
@JoinTable(name = "prod_colour", joinColumns = {
@JoinColumn(name = "colour_id", referencedColumnName = "prod_id")}, inverseJoinColumns = {
@JoinColumn(name = "prod_id", referencedColumnName = "colour_id")})
@ManyToMany(mappedBy = "colourList", fetch = FetchType.LAZY)
private List<Product> productList; //Getter and setter.
//---Utility/helper methods---
//Add rows to the prod_colour table.
public void addToProduct(Product product) {
this.getProductList().add(product);
product.getColourList().add(this);
}
//Delete rows from the prod_colour table.
public void removeFromProduct(Product product) {
this.getProductList().remove(product);
product.getColourList().remove(this);
}
}
Run Code Online (Sandbox Code Playgroud)
Product实体中的关系:
public class Product implements Serializable {
@JoinTable(name = "prod_colour", joinColumns = {
@JoinColumn(name = "prod_id", referencedColumnName = "prod_id")}, inverseJoinColumns = {
@JoinColumn(name = "colour_id", referencedColumnName = "colour_id")})
@ManyToMany(fetch = FetchType.LAZY)
private List<Colour> colourList; //Getter and setter.
}
Run Code Online (Sandbox Code Playgroud)
prod_colour可以从联接表中删除一行中的某些内容:
public boolean delete(Colour colour, Product product)
{
Colour c=entityManager.find(Colour.class, colour.getColourId());
Product p=entityManager.find(Product.class, product.getProdId());
c.removeFromProduct(p);
return true;
}
Run Code Online (Sandbox Code Playgroud)
我们可以有一个等效的CriteriaDelete查询来执行相同的操作吗?
如下查询
public boolean delete(Colour colour, Product product)
{
Colour c=entityManager.find(Colour.class, colour.getColourId());
Product p=entityManager.find(Product.class, product.getProdId());
c.removeFromProduct(p);
return true;
}
Run Code Online (Sandbox Code Playgroud)
无法直观地编写,因为联接表没有prod_colour要执行此查询的实体类。
JPA 2.1是否允许类似的东西来构造这种查询?
| 归档时间: |
|
| 查看次数: |
506 次 |
| 最近记录: |