拥有者:
@Entity
public class Strategy implements Serializable {
@Id
@GeneratedValue
private Long id;
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST})
@JoinTable(name = "StrategyHost", joinColumns = {@JoinColumn(name = "strategyId")}, inverseJoinColumns = {@JoinColumn(name = "hostId")})
private Set<Host> hostName;
}
相关实体:
@Entity
public class Host {
@Id
@GeneratedValue
private Long id;
@Column(unique = true)
private String name;
@ManyToMany(mappedBy = "hostName")
private List<Strategy> strategies;
public Host(String name) {
this.name = name;
}
}
测试:
@Test
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void testStrategyWithHosts() {
Strategy s = new Strategy();
Set<Host> hosts= new HashSet<>();
hosts.add(Host.builder().name("aaa").build());
hosts.add(Host.builder().name("bbb").build());
s.setHostName(hosts);
Strategy saved= strategyDao.save(s);
Set<Host> hostName = saved.getHostName();
}
debug显示具有Host:
的持久性saved
对象
name
值在哪里?但是,如果我在级联类型数组中添加merge
,则name
会被重视。为什么插入(不更新托管实体)操作的相关实体必须具有合并级联类型?虽然日志没有显示出任何可疑之处:
插入策略...
插入主机...
插入主机...
更新策略...
插入strategy_host ...
插入strategy_host ...