2017-01-02 12 views
0

私のエンティティには、別のテーブルと1対1の接続を持つフィールドがあります。そのフィールドのデフォルト値を設定するにはどうしたらいいですか?私はこの@Entityオブジェクトフィールドにデフォルト値を設定する方法

@Column(columnDefinition = "int default 5") 
    @OneToOne(cascade = CascadeType.ALL) 
    private Admin admin; 

のようなものにしようとしていた。しかし、私はこのエラー

@Column(s) not allowed on a @OneToOne 

SQLでテーブルを変更せずにこれをachiveする方法はありますを取得しますか?

EDIT:

は周りのいくつかのものを変更しました。今私はこのようなコードを持っています。

@ManyToOne(cascade = CascadeType.ALL) 
@JoinColumn(name = "admin_id", referencedColumnName = "id", nullable = false, columnDefinition = "bigint(20) DEFAULT 5") 
private Admin admin; 

私も@DynamicInsert@DynamicUpdateを追加しましたが、それはまだ動作しません。私はまた、これらのAdminオブジェクトが既にDBに存在し、それらを再度作成したくないことに注意したい。

+0

'' @JoinColumn(name = "xxx") ''がありますか? –

+1

管理テーブルPKはデフォルトで5ですか? – HRgiger

+0

これは、すべての環境でpkでないかもしれないので、データベースからAdminオブジェクトをロードすることでコンストラクタでこれを設定する必要があります。 –

答えて

1

1つの管理者は、(5)の方が良いように見えるかもしれません@ManyToOne関係を、使用する多くの実体持つことができた場合:あなたがないように、あなたがより良いデータベースからフェッチ

@ManyToOne 
@JoinColumn(name="ID") 
private Admin admin; 

そして、あなたはエンティティを作成するたびにあなたは管理者の任意のフィールドを上書きしないであろうか、カスケーディングのために心配する必要はいけないので、あなたは管理者の最新バージョンにアクセスしたことを確認します

Admin admin = adminService.getDefaultAdmin(); //returns 'select a from Admin a where id = 5' 
Entity entity = new Entity(); 
..fill the fields 
entity.setAdmin(admin); 
entityService.save(entity); 

この方法:LazyLoadingException、このような何かを得ます。

関連する問題