Eclipselink дает исключение проверки

введите здесь описание изображения

Я использовал MySQLWorkbench в качестве инструмента моделирования для создания своей базы данных. Я создал простую тестовую базу данных для тестирования JPA/Eclipselink, сущности Netbeans и генератора веб-сервисов. Когда я создаю сущности и службы, я получаю сообщение об ошибке, подобное этому:

Exception Description: [class com.rako.rma.Rma] uses a non-entity [class com.rako.rma.Product] as target entity in the relationship attribute [field productserialNumberLOTN].
at org.eclipse.persistence.exceptions.ValidationException.nonEntityTargetInRelationship(ValidationException.java:1378)

Объект RMA

public class Rma implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "rma_id")
private Integer rmaId;
@Size(max = 45)
@Column(name = "temp1")
private String temp1;
@JoinColumn(name = "product_serialNumber_LOTN", referencedColumnName = "serialNumber_LOTN")
@ManyToOne(optional = false)
private Product productserialNumberLOTN;

Сущность продукта

public class Product implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 20)
@Column(name = "serialNumber_LOTN")
private String serialNumberLOTN;
@Size(max = 45)
@Column(name = "temp1")
private String temp1;
@Size(max = 45)
@Column(name = "temp2")
private String temp2;
@JoinColumn(name = "serialNumber_LOTN", referencedColumnName = "LOTN", insertable = false, updatable = false)
@OneToOne(optional = false)
private SerialNumber serialNumber;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "productserialNumberLOTN")
private Collection<Rma> rmaCollection;

Серийный номер объекта

public class SerialNumber implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 20)
@Column(name = "LOTN")
private String lotn;
@Size(max = 45)
@Column(name = "temp")
private String temp;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "serialNumber")
private Product product;

Вопрос

1) Я неправильно спроектировал свою БД?

2) Правильно ли работает генератор Netbeans JPA?

3) Если это не работает на 100%, как я могу исправить свою нотацию jpa, чтобы эти отношения работали?


person Sami    schedule 24.04.2015    source источник
comment
Объекты выглядят нормально, когда я вставляю их в проект netbeans. На что похож ваш файл persistence.xml? Может ли сервер запуститься после этого, или проблема только во время генерации?   -  person Jaqen H'ghar    schedule 25.04.2015
comment
При генерации и сервер не запускается. Netbeans 8.02 и Glassfish 4.1.   -  person Sami    schedule 26.04.2015
comment
Я ДУМАЮ, что проблема в том, что char как pk. Если я добавлю одно поле serialNumberID как pk, и это будет просто автоматическое увеличение int, все будет работать нормально. Проблема в том, что REST-сервисы не работают и в Netbeans (тестовый отдых), даже если сервер запущен и работает, но с serialNumberID они работают...   -  person Sami    schedule 26.04.2015
comment
Кажется, нет проблем с тем, что вы показали, поэтому проблема может заключаться в том, что у вас каким-то образом есть несколько экземпляров классов в вашем пути к классам, так что подбирается какая-то другая версия продукта. Проверьте, как он упаковывается и развертывается   -  person Chris    schedule 28.04.2015
comment
Проверьте, есть ли у Product какое-либо лямбда-выражение. С ним связана ошибка.   -  person Jin Kwon    schedule 18.09.2015


Ответы (1)


Каждому из ваших классов сущностей нужна аннотация @Entity поверх них:

@Entity
public class Product implements Serializable {
...
person Zielu    schedule 25.04.2015
comment
Я получил их, но это не причина в моем случае. - person Sami; 26.04.2015