我需要使用JPA注释在hibernate中映射OneToMany关系,其中涉及一个弱实体。
例如
表订单:
CREATE TABLE orders(
idorder serial NOT NULL,
note varchar(30),
CONSTRAINT orders_pkey PRIMARY KEY (idorder)
)
表OrderItems:
CREATE TABLE orderitems(
idorder integer NOT NULL,
iditem serial NOT NULL,
qnt integer,
CONSTRAINT orderitems_pk PRIMARY KEY (idorder, iditem),
CONSTRAINT fk_orderitems FOREIGN KEY (idorder)
REFERENCES orders (idorder) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
在我的班级“Orders”中,我以这种方式实现了方法getOrderItem():
// i need cascadeType.All here
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "order")
public Set<OrderItem> getOrderItems() {
return items;
}
现在, 无法知道将分配给新订单的标识符 在插入之前,例如我可以在OrderItem类中使用Annotations以便自动(以级联模式)提交正确的idOrder吗? 我的目标是得到这样的情况。
Order myOrder = new Order();
// myOrder.setId(1) not necessary
myOrder.setNote("orderNote");
OrderItem firstItem = new OrderItem();
// firstItem.setIdOrder() no need to specify idorder
// firstItem.setId(12);
firstItem.setName("firstItem");
firstItem.setQnt(2);
OrderItem secondItem = new OrderItem();
// secondItem.setId(13);
secondItem.setName("secondItem");
secondItem.setQnt(4);
Set<OrderItem> items = new HashSet<OrderItem>();
items.add(firstItem);
items.add(secondItem);
myOrder.setItems(items);
OrderDAO dao = new OrderDAO();
dao.save(myOrder); // i want inser all items in cascade with the idOder assigned to "myOrder"
答案 0 :(得分:0)
好的,我将尝试添加您需要具有以上给定方案的实体类。
@Entity
@Table(name="orders")
public class Order{
@Id
@GeneratedValue
@Column(name="ID")
private Long id;
@Column(name="note ")
private String note ;
@OneToMany(mappedBy="orders")
private Set<OrderItem> orderitems;
// Getter and Setter methods
}
然后是OrderItem类
@Entity
@Table(name="OrderItems")
public class OrderItem{
@Id
@Column(name="iditem")
private Long iditem;
@Column(name="qnt")
private long qnt ;
@ManyToOne
@JoinColumn(name="idorder")
private Order order;
public OrderItem() {
}
// Getter and Setter methods
}
另外我得到你的setname映射到哪一列..而iditem并不是生成的值,它的指定id类型 那么它也可能是关于逆的问题,谁可能是关系owener .. Inverse = true与 mappedBy 属性使用相同的行为,所以尝试改变它.. 让我知道这是否有效,或者你在尝试这个时遇到问题..