java - Hibernate级联保存

标签 java mysql hibernate jpa persist

我在使用 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/

相关文章:

mysql - mysql中的日期差异基于360天

mysql - 在这种情况下如何使用外键?

spring - Hibernate - Spring,SessionFactory nullPointerException(调用 getCurrentSession() 时)

java - 如何可视化递归

Java:如何使用数据进行 API 调用?

java - 无法查看 Eureka 仪表板

java - Java中多个类访问同一个对象的方法

mysql - 获取 GROUP BY 语句的最新文本条目

java - FUSE 与 CXF 一起 hibernate

java - Hibernate createSqlQuery 没有从数据库获取 blob 数据 - query.list() 上的 "NumberFormatException"