2016-09-05 5 views
0

余分な列を使用した多対多マッピングがあります。ここではマッピングのあるコードをいくつか示します。余分な列を使用した多対多マッピング

GroupEntity

@Id 
@GeneratedValue 
private Long id; 

@OneToMany(mappedBy = "group", cascade = CascadeType.ALL) 
private Set<GroupBrigdeEntity> groupExchanges; 

GroupBrigdeEntity

@Id 
@ManyToOne 
@JoinColumn(name = "group_id") 
private GroupEntity group; 

@Id 
@ManyToOne 
@JoinColumn(name = "exchange_code") 
private ExchangeEntity exchange; 

@Column(name = "enabled") 
private Boolean enabled; 

ExchangeEntity

@Id 
@Column(nullable = false) 
private String code; 

@OneToMany(mappedBy = "exchange") 
private Set<GroupBrigdeEntity> exchangeGroups; 

私の目的は、指定されたIDを持つグループを取得し、それにいくつかの新しい交流を追加することです。

GroupEntity groupEntity = groupRepository.findOne(groupExchangeSettings.getGroupId()); 
    for (GroupExchange exchange : groupExchangeSettings.getExchanges()) { 
     GroupBridgeEntity groupBridge = new GroupExchangeBunchEntity(); 
     groupBridge.setEnabled(exchange.getEnabled()); 
     groupBridge.setExchange(exchangeRepository.findByCode(exchange.getExchangeCode())); 
     groupBridge.setGroup(groupEntity); 
     groupEntity.getGroupExchanges().add(groupExchangeBunch); 
    } 
    groupRepository.save(groupEntity); 

私は例外

2016-09-05 15:27:41.031 WARN 25232 --- [nio-8090-exec-3] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1048, SQLState: 23000 
2016-09-05 15:27:41.032 ERROR 25232 --- [nio-8090-exec-3] o.h.engine.jdbc.spi.SqlExceptionHelper : Column 'group_id' cannot be null 
2016-09-05 15:27:41.033 INFO 25232 --- [nio-8090-exec-3] o.h.e.j.b.internal.AbstractBatchImpl  : HHH000010: On release of batch it still contained JDBC statements 
2016-09-05 15:27:41.034 WARN 25232 --- [nio-8090-exec-3] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Warning Code: 1048, SQLState: 23000 
2016-09-05 15:27:41.034 WARN 25232 --- [nio-8090-exec-3] o.h.engine.jdbc.spi.SqlExceptionHelper : Column 'group_id' cannot be null 
2016-09-05 15:27:41.034 WARN 25232 --- [nio-8090-exec-3] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Warning Code: 1048, SQLState: 23000 
2016-09-05 15:27:41.035 WARN 25232 --- [nio-8090-exec-3] o.h.engine.jdbc.spi.SqlExceptionHelper : Column 'exchange_code' cannot be null 
2016-09-05 15:27:41.049 ERROR 25232 --- [nio-8090-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement] with root cause 

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'group_id' cannot be null 

を取得し、このコードを実行すると、私はその性質が持続カスケードにヌルであるため、私のGroupBrigdeEntityが適切に永続化されていないことを推測する:私は、このようにそれを行います。誰か助けてくれますか? P.Sあなたが私の悪い英語のために私を許してくれることを願っています。

+0

ここで、GroupBridgeEntityのIdClassはどこですか? –

+0

ここに私のポストのすべてのIDがあります。 @BillyFrost以外のIDはありません – jahra

+0

'@ Id'が1つ以上ある場合は、そのクラスに' @ IdClass'が必要です。あなたのものはどこにあるの? –

答えて

0

複数の@Idアノテーションがある中間クラスがあるため、オブジェクトの識別情報は@IdClass注釈で定義する必要があります。 JPAプロバイダがこのクラスのオブジェクトを見つけるためには、オブジェクトを表す単一のアイデンティティ(PK)オブジェクトが必要です。そのため、IDクラスが必要です。同じことが、必要ならば同じem.findに渡されます。それを見つける。これはJPA仕様であり、JPA documentationです。

関連する問題