Подтвердить что ты не робот

EntityNotFoundException в спящем режиме Многие из них сопоставляют, однако данные существуют

Я получаю ошибку javax.persistence.EntityNotFoundException, когда пытаюсь получить объект User via Invoice

invoice.getUser(). GetId()

Ошибка выглядит следующим образом

javax.persistence.EntityNotFoundException: Unable to find com.indianretailshop.domain.User with id 5
    at org.hibernate.ejb.Ejb3Configuration$Ejb3EntityNotFoundDelegate.handleEntityNotFound(Ejb3Configuration.java:137)
    at org.hibernate.proxy.AbstractLazyInitializer.checkTargetState(AbstractLazyInitializer.java:189)
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:178)
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215)

Сущности классов следующие (геттеры и сеттеры не включены)

@Entity
@Table(name="users")
public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(unique=true, nullable=false)
    private int id;

    .
        .
        .

    //bi-directional many-to-one association to Invoice
    @OneToMany(mappedBy="user")
    private List<Invoice> invoices;
}

@Entity
@Table(name="invoice")
public class Invoice implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(unique=true, nullable=false)
    private int id;
        .
        .
        .

    //bi-directional many-to-one association to User
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="Users_id")
    private User user;
}
4b9b3361

Ответ 1

Проблема может заключаться в том, что прямой объект не существует, но также может быть и то, что ссылка на объект из этого объекта, как правило, для типа выборки EAGER, или необязательный = false.

Попробуй это:

     //bi-directional many-to-one association to User
     @ManyToOne(fetch=FetchType.LAZY)
     @JoinColumn(name="Users_id")
     private User user = new User();

Ответ 2

У меня была та же проблема, и

@NotFound(action = NotFoundAction.IGNORE)

решил мою проблему.

Ответ 3

Если вы используете @ManyToOne, указанный объект должен существовать. Единственный другой вариант - указать это поле как длинное и получить ссылочный объект с помощью отдельного запроса.

Выдает исключение (javax.persistence.EntityNotFoundException) вместо того, чтобы возвращать null, если он не может найти запрошенный объект.

Используйте аннотацию @NotFound для устранения этого исключения, если вы ленивы загружаетесь и не обрабатываете это исключение вручную.

 @ManyToOne(
        fetch = FetchType.LAZY)
    @NotFound(
        action = NotFoundAction.IGNORE)
    @JoinColumn(
        name = COLUMN,
        referencedColumnName = COLUMN,
        insertable = false,
        updatable = false)
    private Table table;

Ответ 4

У меня была аналогичная проблема в последнее время, но проблема в том, что запись всегда существует в БД. Поэтому я провел некоторое расследование, выяснилось, что в какой-то момент кэшированная сущность помечена как удаление и перезагрузка с ошибкой перед перезагрузкой из БД. Это случилось в Hibernate 4.3.5 Final для меня Затем я обновляюсь до Hibernate 4.3.11 Final, который, похоже, исправляет проблему.

Ответ 5

Не уверен, что это относится к вашему делу.

Но у меня была аналогичная проблема, когда я обновлялся непосредственно в таблице базы данных X и устанавливал поле null, но в классе java это поле было @NotNull.

Итак, когда другой класс Y имел объект X с ManyToOne, он не смог загрузить объект из-за нулевого значения в сущности.

Ответ 6

пожалуйста попробуйте следующее

@OneToMany(mappedBy="yourMappingattributeName",cascade=CascadeType.ALL) или

@OneToMany(mappedBy="yourMappingattributeName",cascade=CascadeType.MERGE)

Ответ 7

Используйте @NotFound (action = NotFoundAction.IGNORE), если его родитель не существует

Используя cascade = CascadeType.ALL, он удалит родительский объект