EntityNotFoundException при получении отношения ManyToOne, но существует идентификатор объекта - PullRequest
0 голосов
/ 27 августа 2018

Когда я выполняю запрос findeAtDate, я получаю ошибку entityNotFoundException, но в базе данных у меня есть сущность с идентификатором 4, поэтому может быть какая-то ошибка данных в сущности. Работа с идентификатором 4?

enter image description here

Work.java

@Entity
@Table(name = "t_work")
public class Work extends BaseTraceEntity {

    private static final long serialVersionUID = 1L;

    @Pattern(regexp = "[OR]\\d{3}\\/\\d{4}")
    @Basic(optional = false)
    @NotNull
    @Size(min = 9, max = 9)
    @Column(unique = true, nullable = false, length = 9)
    private String code;

    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(nullable = false, length = 45)
    private String name;

    @Basic(optional = false)
    @Column(length = 255)
    private String description;

    @Basic(optional = false)
    @Column(length = 100)
    private String address;

    @XmlJavaTypeAdapter(value = LocalDateAdapter.class)
    @NotNull
    @Column(name = "init")
    private LocalDate init;

    @XmlJavaTypeAdapter(value = LocalDateAdapter.class)
    @Column(name = "end")
    private LocalDate end;

    @ManyToOne(optional = false)
    @NotNull
    @JoinColumn(name = "idWorkType", referencedColumnName = "id", nullable = false)
    private WorkType type;

    @ManyToOne
    @JoinColumn(name = "idCompany", referencedColumnName = "id", nullable = false)
    private Company company;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "work", orphanRemoval = true)
    private Collection<Order_> orders;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "work", orphanRemoval = true)
    private Collection<DeliveryNote> deliveryNotes;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "work", orphanRemoval = true)
    private Collection<Task> tasks;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "work", orphanRemoval = true)
    private Collection<WorkContact> contacts;
...

DeliveryNote.java

@Entity
@Table(name = "t_deliveryNote")
@NamedQueries({
    @NamedQuery(name = DeliveryNote.findAtDate, query = "SELECT dn FROM DeliveryNote dn WHERE :date = :date AND dn.date_d is null")
})
public class DeliveryNote extends BaseTraceEntity {
...
@ManyToOne(optional = false)
    @XmlJavaTypeAdapter(value = WorkAdapter.class)
    @JoinColumn(name = "idWork", referencedColumnName = "id", nullable = false,
            foreignKey = @ForeignKey(name = "deliveryNote2work"))
    private Work work;
...

DeliveryNoteManager.java

@Stateless
public class DeliveryNoteManager {
...
    public List<DeliveryNote> findByAtDate(LocalDate date) {
        List<DeliveryNote> delNotes = this.em.createNamedQuery(DeliveryNote.findAtDate, DeliveryNote.class).
                setParameter("date", date).
                getResultList();

        return delNotes;
    }
...

Рабочие данные

enter image description here

DeliveryNote data

enter image description here

Ошибка

23:40:46,607 ERROR [org.jboss.as.ejb3.invocation] (default task-104) WFLYEJB0034: EJB Invocation failed on component DeliveryNoteManager for method public java.util.List es.roscam.light.business.work.boundary.DeliveryNoteManager.findByAtDate(java.time.LocalDate): javax.ejb.EJBException: javax.persistence.EntityNotFoundException: Unable to find es.roscam.light.business.work.entity.Work with id 4
...
Caused by: javax.persistence.EntityNotFoundException: Unable to find es.roscam.light.business.work.entity.Work with id 4
...

1 Ответ

0 голосов
/ 29 августа 2018

Проблема в том, что существует несоответствие между обязательными полями в базе данных и обязательными свойствами объекта Work.

В базе данных описание полей и адрес пусты, но объект должен получать их как обязательные, поэтому, когдаОтношение manyToOne в DeliveryNote с Work при попытке загрузить его выдает ошибку, поскольку поля пусты.

Таким образом, он получает сообщение об ошибке, что некоторые данные в сущности работают с идентификатором 4.

...