2017-07-26 12 views
1

私のアプリケーションでは、すべての顧客が複数のアカウントを持つことができます。私は、次のようなデータ構造(簡潔にするため省略たくさん)ありますJpa:更新する代わりに扶養家族を削除する

@Entity 
@Table(name = "CUSTOMER") 
public class Customer { 

    @Id 
    @Column(length = 36, name = "CUSTOMER_ID", nullable = false, unique = true) 
    private String id; 

    @OneToMany 
    @JoinColumn(name = "OWNER_ID", referencedColumnName = "CUSTOMER_ID") 
    private List<Account> accounts; 
} 



@Entity 
@Table(name = "ACCOUNT") 
public class Account { 

    @Id 
    @Column(length = 36, name = "ACCOUNT_ID", nullable = false, unique = true) 
    private String id; 

    @Column(name = "OWNER_ID", nullable = false) 
    private String ownerId; 
} 

私は、このような

entityManager.remove(customer); 

として、お客様を削除するためにJPAを使用した場合、それはとの関連ACCOUNT.OWNER_IDフィールドを更新しようとしますヌル。 OWNER_IDはNULL可能ではないため、JDBCExceptionをスローしてトランザクションをロールバックします。

私が達成する必要があるのは、関連するACCOUNT行が削除されることです(存在する場合)。どうやってやるの?私は

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) 

でそれを試みたが、それは動作を変更しません:まだヌルに更新しようとし

はあなたに

更新をありがとうございます。

+0

'@OneToMany(orphanRemoval =" true ")'を試しましたか? –

+0

私はすでにそれを試しましたが、それは問題を解決しませんでした:まだACCOUNT.OWNER_IDフィールドをnullで更新しようとしています。 – Androrider

答えて

0

子供の要素を削除するには、カスケードを使用する必要があると思います。これを試してみてください:

@OneToMany(cascade = CascadeType.ALL) 
@JoinColumn(name = "OWNER_ID", referencedColumnName = "CUSTOMER_ID") 
private List<Account> accounts; 

またManyToOneの関係ではなく文字列IDによって、アカウントの顧客を参照する必要があります。私はあなたの問題を解決するはずです:

@Column(name = "OWNER_ID", nullable = false) 
@ManyToOne 
private Customer owner; 
+0

私はすでにそれを試しましたが、それは問題を解決しませんでした:まだACCOUNT.OWNER_IDフィールドをnullで更新しようとしています。 – Androrider

+0

回答を更新しました@Androrider – Plog

関連する問題