を保存するために失敗した@ManyToOneマッピングは、親ID私はEclipseLinkの実装とJPA2を使用してい
![シンプルなテーブル構造] [1]ここで
私はマップしようと2つの表がありますJPA注釈。
public class Story implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
Integer id;
@Temporal(TemporalType.TIMESTAMP)
@Column (name="DATE_CREATED")
Date dateCreated;
String title;
String description;
@Column(name="AUTHOR_ID")
Integer authorId;
@Column(name="COUNTRY_ID")
Integer countryId;
private String reviews;
@OneToMany(mappedBy = "story", cascade=CascadeType.ALL)
private List<Tip> tipList;
}
public class Tip implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer id;
private String description;
private Integer vote;
@ManyToOne (cascade=CascadeType.ALL)
@JoinColumn(name="STORY_ID", referencedColumnName="ID")
private Story story;
}
単純な例として、同じトランザクションでストーリーといくつかのストーリー関連のヒントを永続化したいとします。
Story newStory = new Story(title, body, ...);
EntityTransaction transaction = em.getTransaction().begin();
boolean completed = storyService.create(newStory);
//The tips are saved as a List<String>. This methods creates the needed List<Tip> from the Strings
List<Tip> tips = TipUtil.getTipList(tipList);
newStory.setTipList(tips)
transaction.commit();
が、私はエラーがなく、すべてのエンティティがデータベースに永続化されています。ここでは がいることを行うコードのセクションです。問題は、ヒントテーブルのstory_id
フィールドが常にNULL
であることです。私は、JPAがストーリーテーブルから新しいid
を得ることができないと想像することができます。ここで正しいアプローチは何ですか?コードの現在の状態で
LE
、Tip
エンティティが永続化が、国のIDがnullのままされています。
もっと自動化された方法がないのでしょうか?さらに、Tipのストーリーフィールドを削除することはスマートなアイデアだとは思っていません。この方法では、@PrimaryKeyJoinColumn(name = "STORY_ID"、referencedColumnName = "ID" )、JPAにはどのようにして参加させるべきかという手がかりはない。これはちょっとだけ私の主題を少し読んで理解したものです。私が間違っている場合は教えてください。 – Dragos
Ebeanには自動解決策がありますが、JPAの実装では自動解決策が提供されていません。 – Palesz