IDと他のオブジェクトのコレクションだけを含むオブジェクトを永続化またはマージできないという問題があります。別のフィールドを追加すると、トランザクションは正常にコミットされます。また、私がID生成戦略をAUTOに変更すると、同様に動作します。コレクションとIDのみを含むエンティティを永続化する方法はありますか?
私のチームの残りの人は "AUTO"の代わりに "IDENTITY"を使用していますので、私はそれらと一貫していたいと思います。それらのエンティティは単なるID +コレクション以上のものなので、それらはうまく機能します。以下は、私が仕事をしたいものです。
@Entity
public class Filter implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, cascade = { CascadeType.ALL })
private ArrayList<Rule> rules = new ArrayList<>();
public Filter() {
}
}
にErrorMessage:基本的に
org.apache.openjpa.persistence.PersistenceException: ERROR: syntax error at or near ")"
Position: 25 {prepstmnt 693640431 INSERT INTO Filter() VALUES()} [code=0, state=42601]
FailedObject: [email protected]
、それだけでIDと参加表だからフィルターを持続またはマージしようとしたとき、それは死にますフィールドなし。
回避策
GenerationType.AUTOに変更GenerationType.IDENTITYを。
-Theは唯一のconが、それは
- これは何AUTOであるように思わ表に1
変更GenerationTypeずつ増加し始め、初期起動主キーが50で周りにジャンプすることのようです拾った
エンティティに任意のフィールドを追加します(つまり、String test = "test")。
- 単純にエンティティにもう1つのフィールドがあると、それが維持されます。しかし、私はこのフィールドを必要としません。コレクションがほしいだけです
リレーションシップを双方向にします。
- 双方向の関係を持たせることで、テーブルは(idではなく)戻ってくるIDを持ちます。これは、Filterが別のレコードによって所有されているためにのみ機能します。
JPAプロバイダが列を持たないINSERT文をサポートしていない場合、そのJPAプロバイダでBUGを発生させます。私は使用しているプロバイダ(DataNucleus)で正しいSQLを生成します。 –
AUTOを使用するのは本当に答えではありません。なぜなら、AUTOはプロバイダにどのような戦略を任せているのかということで、同じ問題で終わるカバーの下でIDENTITYを使うだけです。 –
投稿者から削除 – garfield