JPA:几个关系

时间:2013-08-26 16:28:20

标签: jpa eclipselink one-to-many one-to-one many-to-one

我在使用JPA和正确的注释方面遇到了很多麻烦,尝试了很多注释和组合,比如@JoinColumn,mappedBy等,但仍然会出错。我使用EclipseLink(JPA 2.1)。

我拥有所有者类Store:

@Entity
public class Store extends BaseEntity {

    @NotNull
    private String name;

    @NotNull
    @OneToMany
    private List<Price> listPrices;

    @NotNull
    @OneToMany
    private List<BusinessHours> listBusinessHours;

    @NotNull
    @OneToOne
    @JoinColumn(name="store_id")
    private PointCoordinates pointCoordinates;
...
}

这是PointCoordinates类:

@Entity
public class PointCoordinates extends BaseEntity {

    @NotNull
    private float long;

    @NotNull
    private float lat;

    @OneToOne(mappedBy="pointCoordinates")
    private Store store;
    ...
}

这是'Store'的“@OneToMany”类之一:

@Entity
public class BusinessHours extends BaseEntity {

    private Boolean holiday;

    @ManyToOne
    private Store store;
    ...
}

我认为它应该有用,因为'Store'是'PointCoordinates'的所有者所以我必须使用private Store store注释属性@OneToOne(mappedBy="pointCoordinates"),另一方面我必须注释属性private PointCoordinates pointCoordinates@JoinColumn(name="store_id")但我仍然遇到同样的错误:

Glassfish 4.0上的错误消息

  

引起:javax.persistence.PersistenceException:异常   [EclipseLink-4002](Eclipse持久性服务 -   2.5.0.v20130507-3faac2b):org.eclipse.persistence.exceptions.DatabaseException内部   例外:java.sql.SQLException:Fehler beim Zuweisen einer   Verbindung。 Ursache:java.lang.IllegalStateException:Lokale   Transaktionenthältbereits1 Nicht-XA-Ressource:weitere Ressourcen   könnennichthinzugefügtwerden。错误代码:0调用:INSERT INTO   POINTCOORDINATES(ID,LAT,LONG)VALUES(?,?,?)bind =&gt; [3   参数绑定]

Glassfish 3.1.2.2(英文)

上的错误消息
  

异常[EclipseLink-4002](Eclipse持久性服务 -   2.3.2.v20111125-r10461):org.eclipse.persistence.exceptions.DatabaseException内部   例外:java.sql.SQLException:Fehler beim Zuweisen einer   Verbindung。 Ursache:java.lang.IllegalStateException:Local   事务已经有1个非XA资源:无法添加更多资源。   错误代码:0调用:INSERT INTO POINTCOORDINATES(ID,LAT,LONG)   VALUES(?,?,?)bind =&gt; [3个参数绑定]查询:   InsertObjectQuery(com.company.entities.output.rest.PointCoordinates@3a6a03ea)

1 个答案:

答案 0 :(得分:1)

我有答案!我收到此错误是因为我用“@NotNull”注释了PointCoordinates。这是错误的,您应该使用属性“optional”。

我得到的另一个错误“本地事务已经有1个非XA资源:无法添加更多资源”的原因发生了,因为我有几个不同的事务和几个持久性单元。