Java 又一个",;已分离的实体传递给persist“;例外情况

Java 又一个",;已分离的实体传递给persist“;例外情况,java,hibernate,Java,Hibernate,我有以下数据库模型: A| 1..* ------ 0..1 | B 与下列实体合作: A: B: 方法: public void prepareCreate(A existingAObject) { b = new B(); b.setAList(new ArrayList()); b.getAList.add(existingAObject); } public void create() { getEntityManager().persist(b);

我有以下数据库模型:

A| 1..* ------ 0..1 | B
与下列实体合作:

A:

B:

方法:

public void prepareCreate(A existingAObject) {
    b = new B();
    b.setAList(new ArrayList());
    b.getAList.add(existingAObject);
}

public void create() {
    getEntityManager().persist(b);
}
然后它抛出异常。长话短说:我想为现有的a创建一个新的B,但Hibernate正在尝试创建一个新的a。我认为这是一个注释问题,但不确定如何创建

更新:


向我们展示您如何获得现有的对象。-从数据库(existingA=em.find(id))

还要意识到,如果要保存A和B之间的关联,那么必须设置A.singleB,因为它是关联的拥有方。 -尝试了,但仍然得到了异常

并向我们展示B实体的完整代码:它的ID是什么?它是如何生成的

非常简单:

public class B implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id", nullable = false)
    private Integer id;

    @OneToMany(mappedBy = "B")
    private List<A> aList;


    @XmlTransient
    public List<A> getAList() {
        return eventos;
    }

    public void setAList(List<A> aList) {
        this.aList= aList;
    }
public类B实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@基本(可选=假)
@列(name=“id”,nullable=false)
私有整数id;
@OneToMany(mappedBy=“B”)
私人名单;
@XmlTransient
公共列表getAList(){
返回事件;
}
公共无效集合列表(列表列表列表){
这个.aList=aList;
}

}

向我们展示如何获得现有对象。还要意识到,如果要保存A和B之间的关联,则必须设置
A.singleB
,因为它是关联的拥有方。并向我们展示B实体的完整代码:它的ID是什么?它是如何生成的?好的,用缺少的代码完成的。
B.id
字段在调用
persist()
时是否为空?是的,因为它打算创建一个新的B,然后用新创建的B持久化a实体。您的代码不持久化a。它持久化B。向我们显示实际代码和异常的完整堆栈跟踪。
...
b.prepareCreate(existingA);
dao.create();
...
public void prepareCreate(A existingAObject) {
    b = new B();
    b.setAList(new ArrayList());
    b.getAList.add(existingAObject);
}

public void create() {
    getEntityManager().persist(b);
}
public class B implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id", nullable = false)
    private Integer id;

    @OneToMany(mappedBy = "B")
    private List<A> aList;


    @XmlTransient
    public List<A> getAList() {
        return eventos;
    }

    public void setAList(List<A> aList) {
        this.aList= aList;
    }