我是新来的冬眠。我正在尝试获取多对多映射的结果,但没有得到预期的结果。
我有两个实体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 ..数学
为什么结果不匹配。请帮忙。
答案 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)上设置关联列表即可。