0

現在、デスクトップアプリケーション(J2SE)を開発しています。オブジェクトを永続化するためにjpaを使用しようとしていますが、奇妙な結果が得られました。
私には子供を持つことができる1つのエンティティがあります。上のオブジェクトを永続化すると、その子は永続化されません。これが私の実体です:

@Entity
@Table(name = "Group")
public class Group {

/**
 * The identifier
 */
@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
private int id;
/**
 * The name label
 */ 
@Column(name = "NAME", length = 60, nullable = true)

private String name;
/**
 * The parent
 */

@ManyToOne
@JoinColumn(name="PARENT_ID")
private Group parent;
/**
 * The children
 */
@OneToMany(mappedBy="parent")
private List<Group> children;

/**
 * Default constructor
 */
public Group() {

}

/**
 * Const using fields
 * 
 * @param name
 * @param parent
 * @param children
 */

public Group(String name, Group parent,
        List<Group> children) {
    super();
    this.name = name;
    this.parent = parent;
    this.children = children;
}

/**
 * @return the id
 */
public int getId() {
    return id;
}

/**
 * @param id
 *            the id to set
 */

public void setId(int id) {
    this.id = id;
}

/**
 * @return the name
 */
public String getName() {
    return name;
}

/**
 * @param name
 *            the name to set
 */
public void setName(String name) {
    this.name = name;
}

/**
 * @return the parent
 */
public Group getParent() {
    return parent;
}

/**
 * @param parent
 *            the parent to set
 */

public void setParent(Group parent) {
    this.parent = parent;
}

/**
 * @return the children
 */
public List<Group> getChildren() {
    return children;
}

/**
 * @param children
 *            the children to set
 */
public void setChildren(List<Group> children) {
    this.children = children;
}
}

そして、これが私のテスト方法です:

...

    // the entity manager
    EntityManager entityManager = entityManagerFactory
            .createEntityManager();
    entityManager.getTransaction().begin();

    // create a couple of groups...
    Group gp = new Group("first", null, null);
    Group p = new Group("second", null, null);
    p.setParent(gp);
    Group f = new Group("third", null, null);
    f.setParent(p);

    // set gp children
    List<Group> l1 = new ArrayList<Group>();
    l1.add(p);
    gp.setChildren(l1);

    // set p children
    List<Group> l2 = new ArrayList<Group>();
    l2.add(f);
    p.setChildren(l2);

    // persisting 
    entityManager.persist(gp);

何か案が?
よろしくお願いし
ますAmrou

4

1 に答える 1

1

すべてのエンティティを個別に永続化するか、に設定する必要がありcascade=ALLます@OneToMany

エンティティをコレクションに追加するだけでは、子エンティティは永続化されません。entityManager.persistカスケードは、他の到達可能なエンティティを1回の呼び出しで持続させる魔法です。

于 2013-03-25T01:05:25.160 に答える