1

int 主キーを持つエンティティ LearningUnit があります。実際には、それ以上のものはありません。

Entity Concept はそれと次の関係があります。 @ManyToOne @Size(min=1,max=7) private LearningUnit learningUnit;

Concept のコンストラクターで、最大の主キーを持つ LearningUnit を取得する必要があります。LearningUnit がまだ存在しない場合は、インスタンス化します。次に、this.learningUnit を取得/インスタンス化に設定します。

最後に、try-catch ブロックで Concept の空のコンストラクターを呼び出して、entitymanager にカーディナリティ チェックを実行させます。例外がスローされた場合 (すでに別の 7 つのコンセプトが同じ LearningUnit を参照している場合に例外が発生すると予想されます。その場合、新しいより大きな主キーを使用して新しい LearningUnit をインスタンス化します。

また、上記で概説したアルゴリズムに明確な落とし穴がある場合は、それも指摘してください。

4

1 に答える 1

1

最大の主キーを持つエンティティを見つける方法は?

あなたはこのようなことをすることができます:

try {
    Query q = entityManager.createQuery("from LearningUnit unit order by unit.id desc");
    q.setMaxResults(1);
    LearningUnit unit = (LearningUnit) q.getSingleResult();
    // we found a LearningUnit
    // ...
} catch (NoResultException e) {
    // We didn't find any LearningUnit
    // ...
}

上記で概説したアルゴリズムの落とし穴がある場合は、それも指摘してください。

実際、私はそのロジックをエンティティのコンストラクターに配置しません(通常、エンティティマネージャーにアクセスできない場合、これは悪いことではありません)。このロジックをサービスメソッドに実装します(ビジネスロジックだと思うので、このロジックが属します)。

@Sizeちなみに、制約は関連付けの反対側、にあるべきだと思いますCollection

于 2010-05-20T19:33:53.353 に答える