在用jpa的时候,发现一个问题:在实现一对多关系
配置如下:
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "expenseRequisition")
发现多方对应的list数据重复,
不知道各位有没有遇见过同样的问题。
在用jpa的时候,发现一个问题:在实现一对多关系
配置如下:
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "expenseRequisition")
发现多方对应的list数据重复,
不知道各位有没有遇见过同样的问题。
我估计是你的映射文件或者是表结构的设计出了问题,在这我提供一个参考实例,希望对你有所帮助:
[b]多对多:订单<-->商品[/b]
[b]数据库表结构:[/b]
[code="java"]
CREATE TABLE PRODUCT(
PRODUCT_ID VARCHAR(36) NOT NULL PRIMARY KEY,
PRODUCT_CODE VARCHAR(32) NOT NULL UNIQUE,
PRODUCT_NAME VARCHAR(32) NOT NULL,
PRODUCT_PRICE DECIMAL(10,2) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=UTF8;
CREATE TABLE ORDERS(
ORDER_ID VARCHAR(36) NOT NULL PRIMARY KEY,
TOTAL_PRICE DECIMAL(10,2) NOT NULL
)ENGINE=INNODB DEFAULT CHARSET=UTF8;
CREATE TABLE ORDERS_PRODUCT(
ORDER_ID VARCHAR(36) NOT NULL,
PRODUCT_ID VARCHAR(36) NOT NULL,
PRIMARY KEY(ORDER_ID,PRODUCT_ID)
)ENGINE=INNODB DEFAULT CHARSET=UTF8;
INSERT INTO PRODUCT(PRODUCT_ID,PRODUCT_CODE,PRODUCT_NAME,PRODUCT_PRICE) VALUES('1','mp3','MP3随身听',100);
INSERT INTO PRODUCT(PRODUCT_ID,PRODUCT_CODE,PRODUCT_NAME,PRODUCT_PRICE) VALUES('2','mp4','MP4随身看',1000);
INSERT INTO ORDERS(ORDER_ID,TOTAL_PRICE) VALUES('1',1100);
INSERT INTO ORDERS(ORDER_ID,TOTAL_PRICE) VALUES('2',1100);
INSERT INTO ORDERS_PRODUCT(ORDER_ID,PRODUCT_ID) VALUES('1','1');
INSERT INTO ORDERS_PRODUCT(ORDER_ID,PRODUCT_ID) VALUES('1','2');
INSERT INTO ORDERS_PRODUCT(ORDER_ID,PRODUCT_ID) VALUES('2','1');
INSERT INTO ORDERS_PRODUCT(ORDER_ID,PRODUCT_ID) VALUES('2','2');
[/code]
[b]XML实体映射文件:[/b]
[code="java"]
<!-- 由Order对象维护关联关系,Order为主控方 -->
<class name="cn.com.sise.relate.manyToMany.Order" table="ORDERS">
<id name="orderId" type="string">
<column name="ORDER_ID" length="36"/>
<generator class="guid"/>
</id>
<property name="totalPrice">
<column name="TOTAL_PRICE" precision="10" scale="2"/>
</property>
<set name="products" table="ORDERS_PRODUCT" cascade="save-update" inverse="true" fetch="join">
<key column="ORDER_ID"/>
<many-to-many class="cn.com.sise.relate.manyToMany.Product">
<column name="PRODUCT_ID"/>
</many-to-many>
</set>
</class>
[/code]
[b]实体Java文件:[/b]
[code="java"]
import java.util.HashSet;
import java.util.Set;
public class Order {
private String orderId;
private Float totalPrice;
private Set<Product> products = new HashSet<Product>();
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public Float getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(Float totalPrice) {
this.totalPrice = totalPrice;
}
public Set<Product> getProducts() {
return products;
}
public void setProducts(Set<Product> products) {
this.products = products;
}
}
[/code]
[code="java"]
import java.util.HashSet;
import java.util.Set;
public class Product {
private String productId;
private String productCode;
private String productName;
private Float productPrice;
private Set<Order> orders = new HashSet<Order>();
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public String getProductCode() {
return productCode;
}
public void setProductCode(String productCode) {
this.productCode = productCode;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public Float getProductPrice() {
return productPrice;
}
public void setProductPrice(Float productPrice) {
this.productPrice = productPrice;
}
public Set<Order> getOrders() {
return orders;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
}
[/code]
你可以对照下你的映射设置是否有问题。