在多对多映射的情况下无法获得预期的结果

时间:2019-01-22 07:58:00

标签: java hibernate many-to-many

我是新来的冬眠。我正在尝试获取多对多映射的结果,但没有得到预期的结果。

我有两个实体1. Emp 2.部门。两者都以多对多关系映射到DB。

Emp.java

class BuyTransaction: public Transaction {  
 public:  
  BuyTransaction( parameters ):Transaction(createLogString(parameters)) { ... }
  ...   
 private:  
  static std::string createLogString( parameters );  
}; 

在配置文件中:当我将hbm2ddl.auto指定为'create'时,它给了我如下所示的预期结果: 员工详细信息 1 .. 1 ..物理 1 .. 2 ..数学 1 .. 3 ..化学

但是当我将其更改为'update'并注释了我在App.java中所做的保存操作时,它给了我下面的结果。 1 .. 2 ..数学

为什么结果不匹配。请帮忙。

1 个答案:

答案 0 :(得分:0)

对于实体Emp添加此

@ManyToMany(cascade = {
    CascadeType.PERSIST,
    CascadeType.MERGE,
    CascadeType.DELETE
})
@JoinTable(name = "EMP_DEPT",
    joinColumns = @JoinColumn(name = "emp_id"),
    inverseJoinColumns = @JoinColumn(name = "dept_id")
)
private List<Dept> depts= new ArrayList<>();

如果您希望该关系是双向的,请将以下代码部分添加到Dept类中:

 @ManyToMany(cascade = {
    CascadeType.PERSIST,
    CascadeType.MERGE,
    CascadeType.DELETE
})
@JoinTable(name = "EMP_DEPT",
    joinColumns = @JoinColumn(name = "emp_id"),
    inverseJoinColumns = @JoinColumn(name = "dept_id")
)
private List<Emp> emps= new ArrayList<>();

通过这种映射方式,您无需插入到交叉表中,而只需在实体(您的情况下为Emt e Dept)上设置关联列表即可。