2013-08-26 2 views
0

У меня много проблем с JPA и правыми аннотациями, и я пробовал много аннотаций и комбинаций, таких как @JoinColumn, mappedBy и т. Д., Но все равно получаю ошибки. Я использую EclipseLink (JPA 2.1).JPA: несколько отношений

У меня есть владелец класса магазин:

@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; 
    ... 
} 

И это одна из "@OneToMany" классов 'Магазин':

@Entity 
public class BusinessHours extends BaseEntity { 

    private Boolean holiday; 

    @ManyToOne 
    private Store store; 
    ... 
} 

Я думал, что он должен работать, потому что «Магазин» является владельцем «PointCoordinates», поэтому мне нужно аннотировать att ribute private Store store с @OneToOne(mappedBy="pointCoordinates"), а с другой стороны, я должен аннотировать атрибут private PointCoordinates pointCoordinates с @JoinColumn(name="store_id") Но я все еще получаю ту же ошибку:

Сообщение об ошибке на Glassfish 4.0

Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLException: Fehler beim Zuweisen einer Verbindung. Ursache: java.lang.IllegalStateException: Lokale Transaktion enthält bereits 1 Nicht-XA-Ressource: weitere Ressourcen können nicht hinzugefügt werden. Error Code: 0 Call: INSERT INTO POINTCOORDINATES (ID, LAT, LONG) VALUES (?, ?, ?) bind => [3 parameters bound]

Сообщение об ошибке на Glassfish 3.1.2.2 (Английский)

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLException: Fehler beim Zuweisen einer Verbindung. Ursache: java.lang.IllegalStateException: Local transaction already has 1 non-XA Resource: cannot add more resources. Error Code: 0 Call: INSERT INTO POINTCOORDINATES (ID, LAT, LONG) VALUES (?, ?, ?) bind => [3 parameters bound] Query: InsertObjectQuery([email protected])

+0

Это выглядит, если у вас есть проблемы с окружающей средой. Используете ли вы сервер приложений или контейнер сервлетов? Если вы считаете, что ваш JPA-код отвечает за это исключение, попробуйте комментировать связь. – Claude

+0

Спасибо, Майкл за вашу преданность делу, но я решил проблему, посмотрю на мой ответ. – user2047688

ответ

1

У меня есть ответ! Я получил эту ошибку, потому что я аннотировал PointCoordinates с помощью «@NotNull». Это неправильно, вы должны использовать атрибут «optional».

Причина другой ошибки, которую я получил «У локальной транзакции уже есть 1 ресурс, отличный от XA: не может добавить больше ресурсов», потому что у меня было несколько разных транзакций с несколькими единицами сохранения.

Смежные вопросы