cascade persist导致ManyToMany实体

时间:2018-01-05 09:01:39

标签: spring-data-jpa

拥有者:

@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对象

result for cascade type persist only

name值在哪里?但是,如果我在级联类型数组中添加merge,则name会被重视。为什么插入(不更新托管实体)操作的相关实体必须具有合并级联类型?虽然日志没有显示出任何可疑之处:

  

插入策略...
  插入主机...
  插入主机...
  更新策略...
  插入strategy_host ...
  插入strategy_host ...

0 个答案:

没有答案