Java 以多对多关系向对象添加数据(两种方式),

Java 以多对多关系向对象添加数据(两种方式),,java,jpa,many-to-many,openjpa,Java,Jpa,Many To Many,Openjpa,以这一类为例: @Entity(name = "ORDERS") public class Order { @Id @Column(name = "ORDER_ID", nullable = false) @GeneratedValue(strategy = GenerationType.AUTO) private long orderId; @Column(name = "CUST_ID") private long custId; @Colu

以这一类为例:

@Entity(name = "ORDERS") 
public class Order {
   @Id 
   @Column(name = "ORDER_ID", nullable = false)
   @GeneratedValue(strategy = GenerationType.AUTO)
   private long orderId;

   @Column(name = "CUST_ID")
   private long custId;

   @Column(name = "TOTAL_PRICE", precision = 2)
   private double totPrice;

   @OneToOne(optional=false,cascade=CascadeType.ALL, mappedBy="order",
   targetEntity=Invoice.class)
   private Invoice invoice;

   @ManyToOne(optional=false)
   @JoinColumn(name="CUST_ID",referencedColumnName="CUST_ID")
   private Customer customer;

   @ManyToMany(fetch=FetchType.EAGER)
   @JoinTable(name="ORDER_DETAIL",
           joinColumns=
           @JoinColumn(name="ORDER_ID", referencedColumnName="ORDER_ID"),
     inverseJoinColumns=
           @JoinColumn(name="PROD_ID", referencedColumnName="PROD_ID")
   )
   private List<Product> productList;       
   ...............
   The other attributes and getters and setters goes here
上面的例子很有效——我可以在数据库中看到它。如果我这样做:

 EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("something");
    EntityManager em = emFactory.createEntityManager();
    EntityTransaction trans = em.getTransaction();

    trans.begin();

    Order order = em.find(Order.class, 1);
    Product product = em.find(Product.class, 51);

    product.getOrderList().add(order);

    trans.commit
    em.close();
    emFactory.close();
在上面的示例中,数据库没有更新。这不是双向的吗?有什么我应该做的吗


Hank

尝试在@ManyToMany选项上添加级联,如下所示:

@ManyToMany(
        mappedBy="productList",
        fetch=FetchType.EAGER,
        cascade = {CascadeType.ALL}
)

首先,您应该始终设置关系的双方


当您仅从产品端设置时,它不起作用的原因是该关系属于订单端。

您是否尝试在订单类上添加
@manytomy(fetch=FetchType.EAGER,cascade={CascadeType.ALL})
 EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("something");
    EntityManager em = emFactory.createEntityManager();
    EntityTransaction trans = em.getTransaction();

    trans.begin();

    Order order = em.find(Order.class, 1);
    Product product = em.find(Product.class, 51);

    product.getOrderList().add(order);

    trans.commit
    em.close();
    emFactory.close();
@ManyToMany(
        mappedBy="productList",
        fetch=FetchType.EAGER,
        cascade = {CascadeType.ALL}
)