2017-05-13 9 views
0

私はHibernateに問題があります。 私はクラス持っmy data modelHibernate cascade save

を参照してください - 私は次のエラーを取得する

Ticket ticket = new Ticket(); 
    User user = userService.findBySSO(userName); 
    ticket.setUser(user); 


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

    persist(ticket); 

... "チケット" ...

@ManyToMany(fetch = FetchType.EAGER) 
@JoinTable(name = "ticketComposition", 
     joinColumns = { @JoinColumn(name = "ticketId")}, 
     inverseJoinColumns = { @JoinColumn(name = "tripsSiteId")}) 
private Set<TripsSite> tripsSites = new HashSet<TripsSite>(); 

と私は新しいチケットを保存しようとしています: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:子行を追加または更新できません:外部キー制約が失敗しました(sbbticketcomposition、CONSTRAINT ticket FOREIGN KEY(ticketId)参照番号ticketid))

この問題を解決するにはどうすればよいですか?持続、あなたが@ManyToManyマッピングの両側の依存関係を設定する必要がありますが

@ManyToMany(mappedBy="tripSites") 
private Set<Trip> trips = new HashSet<Trip>(); 

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); 

私が想定していますあなたがTicketSiteエンティティで定義されている。このような何かを持っていると仮定すると

答えて

0

ticketSitesセットが以前にデータベースから取得され、このトランザクションメソッドが開始される前に永続化されていることを確認します。

+0

はい、私はtripsSitesを取得します。リスト tripsSites = getEntityManager() .createNativeQuery .setParameter( "ST2"、ST2)(nativeQuery、TripsSite.class) .setParameter(ST1 "ST1") .setParameter( "dirId"、dirId) .setParameter ( "carId"、carId) .setParameter( "siteId"、siteId) .getResultList(); – 1sik

関連する問題