我在使用 Hibernate 时遇到问题。 请参阅my data model
我有课 - “票”...
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "ticketComposition",
joinColumns = { @JoinColumn(name = "ticketId")},
inverseJoinColumns = { @JoinColumn(name = "tripsSiteId")})
private Set<TripsSite> tripsSites = new HashSet<TripsSite>();
当我尝试保存新票时...
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
) REFERENCES ticket
(id
))
如何解决这个问题?
最佳答案
假设您在 TicketSite
实体上定义了类似的内容:
@ManyToMany(mappedBy="tripSites")
private Set<Trip> trips = new HashSet<Trip>();
在保留时,您必须在 @ManyToMany
映射的两侧设置依赖项:
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
集之前已从数据库中检索,并在此事务方法启动之前已保留。
关于java - Hibernate级联保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43949205/