如何在JPA中持久化List <object>类型的属性?

时间:2017-10-22 07:52:11

标签: java mysql jpa java-ee payara

使用对象保持列表的最佳方法是什么?我正在使用带有JPA的JavaEE 7。对象B也是一个实体。

我的模特

@Entity
public class ObjectA implements Serializable {

    @Id @GeneratedValue
    private Long id;

    // What should I use here?
    private List<ObjectB> objectList;

    public ObjectA () {
        this.objectList = new ArrayList<ObjectB>();
    }
}

我的JPA致电

@Stateless
@JPA
public class ObjectJPA{

    @PersistenceContext(unitName = "ObjectProjectPU")
    private EntityManager em;

    // How can I insert a record in the table for objectList here?
    public void insertIntoObjectList(ObjectB objectB) {
        em.persist(objectB); // This must be wrong?
    }
}

我更喜欢的是objectList的数据库表如下所示:

id (ObjectA_id) | objectB_id     or    id | ObjectA_id | objectB_id

2 个答案:

答案 0 :(得分:0)

您的 ObjectA 类应如下所示。

&#13;
&#13;
@Entity
public class ObjectA implements Serializable {

    @Id @GeneratedValue
    private Long id;

    // What should I use here?
    private List<ObjectB> objectList;
	
    @OneToMany(mappedBy = "objectB_id")
    public List<ObjectB> getObjectList() {
        return objectList;
    }

    public void setObjectList(List<ObjectB> listOfObjetB) {
        this.objectList = listOfObjetB;
    }

    public ObjectA () {
        this.objectList = new ArrayList<ObjectB>();
    }
}
&#13;
&#13;
&#13;

这将在您的A类和B类之间建立关系。

正确地按照以下链接给出的示例。它将帮助您理解JPA的一对多关系。 :)

答案 1 :(得分:0)

我发现这很容易。

ObjectA模型

@OneToMany
@JoinTable
(
    name="OBJECTA_OBJECTB",
    joinColumns={ @JoinColumn(name="ID", referencedColumnName="ID") },
    inverseJoinColumns={ @JoinColumn(name="OBJECTB_ID", referencedColumnName="ID") }
)
private List<ObjectB> objectList;

JPA CALL

public void insertIntoObjectList(ObjectB object) {
    object.setSomeDataInObjectList(list); // just a random list here
    em.persist(object); 
}

ObjectB模型

@ManyToOne
ObjectA objectA;