how to mapping an OneToMany relation with Weak Entity in Hibernate

三世轮回 提交于 2021-02-19 05:43:05

问题


I need to map a OneToMany relationship in hibernate, with the JPA annotations, in which is involved a weak entity.
For example
Table orders:

CREATE TABLE orders(
idorder serial NOT NULL,
note varchar(30),
CONSTRAINT orders_pkey PRIMARY KEY (idorder)
)

Table 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
)

Within my class "Orders" I have realized the method getOrderItem() in this way:

// i need cascadeType.All here
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "order")
public Set<OrderItem> getOrderItems() {
    return items;
}

now, not being able to know the identifier that will be assigned to a new order prior to insertion, such as Annotations can I use within the class OrderItem in order to submit automatically (in cascade mode) the correct idOrder?
my goal is to get a situation like this.

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"

回答1:


Ok I will try to add Entity classes you need to have above given scenario.

@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
}

And then the OrderItem class

@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
}

Also i dint get which column your setname maps to.. and iditem isnt generated value its assigned id type Ok then it also could be issue about inverse that who could be the relationship owener .. Inverse=true is same behaviour as mappedBy attribute usage so try changing it.. Let me know if this works or you get a issue while trying this out..



来源:https://stackoverflow.com/questions/29760730/how-to-mapping-an-onetomany-relation-with-weak-entity-in-hibernate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!