我在使用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)
答案 0 :(得分:1)
我有答案!我收到此错误是因为我用“@NotNull”注释了PointCoordinates。这是错误的,您应该使用属性“optional”。
我得到的另一个错误“本地事务已经有1个非XA资源:无法添加更多资源”的原因发生了,因为我有几个不同的事务和几个持久性单元。