2017-12-13 15 views
0

私は、アドレスと共にユーザオブジェクトを保存しようとしていました。 Userクラス内には、Addressという関係が定義されています。 Addressの内部には、Userと定義されています。ネストされた関係エンティティでNULL値が渡されました - Spring Boot

オブジェクトを作成し、データベースに保存しようとすると、次のエラーを取得:

SqlExceptionHelper : ERROR: null value in column "user_id" violates not-null constraint

@Entity 
class Address { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 

    private String address; 

    @ManyToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "user_id") 
    private User user; 

    //getter setter 
} 

Userクラスを。

class User implements UserDetails { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 

    @OneToMany(cascade = CascadeType.ALL) 
    private List<Address> address; 

    //Other fields, getters, & setters 
} 

UserServiceクラス。 Addressクラスに作成された後user_idを渡す方法

class UserService { 

    public long createUser(User user) { 

     User u = new User(); 
     Address address = new Address(); 
     address.setAddress("Windsong Palace"); 
     address.setZipCode("239749"); 

     List<Address> adds = new ArrayList<>(); 
     adds.add(address); 

     u.setAddress(adds); 
     //userRepository is the interface extends from JpaRepository<User, Long> 
     userRepository.save(u); 
    } 
} 

+0

ユーザーを永続化する場合、関連するアドレスオブジェクトもリレーションで保持する必要があります。そして今のところあなたのエンティティのマッピングは良く見えます。あなたは何が欠けていますか?何が起こっていない? –

+0

私はliquibaseが問題を引き起こすことに気づいていませんでした。私はliquibaseを使用していましたが、私はその問題を解決しました。 – mubeen

+0

素晴らしい他の人が混乱しないように、この発見に関するあなた自身の質問に答えるならば、今は良くなります。 –

答えて

2

エラーは、アドレスオブジェクトにユーザーオブジェクトへの参照がないことを示します。

コードを見ると、アドレスフィールドのユーザーは設定されません。試してみてください:

... 
address.setAddress("Windsong Palace"); 
address.setZipCode("239749"); 
address.setUser(u); 
... 
0

私は問題を見つけます。それはliquibaseに起因していた。私は自分のアプリケーションでliquibaseを使っていました。 liquibase xmlファイルでは、テーブルUser,Addressを作成しました。 application.propertiesspring.jpa.hibernate.ddl-auto=none

しかし、ユーザーとアドレスを作成するとき。リポジトリのsaveAddressuser_idを挿入できませんでした。nullを挿入しました。

liquibase.enabled=false(liquibaseの除去)を回すことで問題が解決しました。

私はこれが良い解決策ではないと思います。しかし、そのliquibaseなしで動作します。

関連する問題