2012-04-24 5 views
2

私はPlayフレームワークとyml表記法が新しく、Hibernateの基本を知っています。 .ymlファイルを使用していくつかのテストデータを設定しようとしています。私はいくつかのQuestionオブジェクトと、同じCompetitionオブジェクトを参照するActiveCompetitionオブジェクトを定義しようとします。私は動作しますが、Hibernateは* mycompetition 4回を保存しているようですyml表記で定義されたオブジェクトの重複

ActiveCompetition(1): &myactivecompetition 
    activeCompetition: &mycompetition 
     name: Name of the competition 

Question(11): 
    title: Title 1 
    competition: *mycompetition 

Question(12): 
    title: Title 2 
    competition: *mycompetition 

Question(13): 
    title: Title 3 
    competition: *mycompetition 

:私の.ymlファイルには、この(私は関係ありません何を考えて削除した)のように見えます。 Javaの豆で

次のようにのjavax.persistenceの属性が設定されています

@Entity 
@Transactional 
public class ActiveCompetition extends Model { 

    @Required 
    @OneToOne(cascade= CascadeType.ALL) 
    private Competition activeCompetition; 
} 

@Entity 
@Transactional 
public class Question extends Model { 

    ... 

    @Required 
    @OneToOne(cascade= CascadeType.ALL) 
    private Competition competition; 
} 

は、どのように私は、Hibernateは* mycompetitionがデータベースに一度だけ保存されるべきであることを理解させるのですか? .ymlファイルにデータベースIDを書き込むべきですか?もしそうなら、私はこれをどのようにするのですか?私はすでに 'id:99'をactiveCompetitionの下に追加しようとしましたが、それは役に立ちません。

答えて

1

2つの可能性の問題があります。

まず一つは、あなたがrelatiosn OneToOneを宣言しているが、その後、あなたのYAMLファイルにあなたがManyToOne関係を作成することです。 OneToOneは各ActiveCompetitionに最大で1つの質問があり、各質問は多くとも1つのActiveCompetitionに関係することを意味します。

ActiveCompetitionには多くの質問があるManyToOne関係が必要です。 Javaコードを更新する必要があります。

2つ目は、あなたのようにあなたのActiveCompetitionを定義しているということです。

YAMLで
ActiveCompetition(1) 

、私の知る限り、あなたはエンティティに提供された参照して、ファイル内の他のエンティティを参照する(あるいは、それは私がそれをやった方法です)。上の宣言では、参照番号は()の間の数字1です。

だから、あなたがあなたのファイルを変更する必要があります。

Question(13): 
    title: Title 3 
    competition: 1 
+0

問題#2が問題でした。今それは動作します。ありがとうございました! – nturpin

関連する問題