首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate级联保存

Hibernate级联保存
EN

Stack Overflow用户
提问于 2017-05-13 12:33:44
回答 1查看 42关注 0票数 0

我对Hibernate有点问题。请参阅my data model

我有课--“入场券”...

代码语言:javascript
复制
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "ticketComposition",
        joinColumns = { @JoinColumn(name = "ticketId")},
        inverseJoinColumns = { @JoinColumn(name = "tripsSiteId")})
private Set<TripsSite> tripsSites = new HashSet<TripsSite>();

当我想存新票的时候...

代码语言:javascript
复制
    Ticket ticket = new Ticket();
    User user = userService.findBySSO(userName);
    ticket.setUser(user);


    ticket.setTripsSites(new HashSet<>(tripsSites));

    persist(ticket);

我得到以下错误: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:无法添加或更新子行:外键约束失败(sbb.ticketcomposition,constraint ticket外键(ticketId)引用ticket (id))

如何解决此问题?

EN

回答 1

Stack Overflow用户

发布于 2017-05-13 13:11:22

假设您在TicketSite实体上定义了如下内容:

代码语言:javascript
复制
@ManyToMany(mappedBy="tripSites")
private Set<Trip> trips = new HashSet<Trip>();

在持久化时,您必须在@ManyToMany映射的两端设置依赖项:

代码语言:javascript
复制
Ticket ticket = new Ticket();
User user = userService.findBySSO(userName);
ticket.setUser(user);

ticket.setTripsSites(new HashSet<>(tripsSites));

for(TicketSite ticketSite: ticketSites){
   ticketSite.getTickets().add(ticket);
} 

persist(ticket);

我假设ticketSites集以前已经从数据库中检索过,并且在这个事务性方法启动之前已经持久化了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43949205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档