복붙노트

[SPRING] Hibernate의 EntityNotFoundException Many to One 매핑 그러나 데이터가 존재 함

SPRING

Hibernate의 EntityNotFoundException Many to One 매핑 그러나 데이터가 존재 함

Invoice 객체를 통해 User를 얻으려고 할 때 javax.persistence.EntityNotFoundException 오류가 발생합니다.

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

해결법

  1. ==============================

    1.문제는 직접 엔티티가 존재하지 않을 수도 있지만 일반적으로 EAGER 가져 오기 유형의 경우 엔 해당 엔티티의 참조 된 엔티티가 될 수도 있고 optional = false 일 수도 있습니다.

    문제는 직접 엔티티가 존재하지 않을 수도 있지만 일반적으로 EAGER 가져 오기 유형의 경우 엔 해당 엔티티의 참조 된 엔티티가 될 수도 있고 optional = false 일 수도 있습니다.

    이 시도:

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

    2.나는 같은 문제를 겪었다.

    나는 같은 문제를 겪었다.

    @NotFound(action = NotFoundAction.IGNORE)
    

    내 문제를 해결했다.

  3. ==============================

    3.@ManyToOne을 사용하면 참조 된 엔터티가 존재해야합니다. 다른 옵션은 해당 필드를 long으로 지정하고 별도의 쿼리를 통해 참조 된 엔터티를 검색하는 것입니다.

    @ManyToOne을 사용하면 참조 된 엔터티가 존재해야합니다. 다른 옵션은 해당 필드를 long으로 지정하고 별도의 쿼리를 통해 참조 된 엔터티를 검색하는 것입니다.

    요구 된 엔티티를 발견 할 수없는 경우는 null를 돌려주는 대신에 예외 (javax.persistence.EntityNotFoundException)를 슬로우합니다.

    @NotFound 주석을 사용하여 지연로드를하고이 예외를 수동으로 처리하지 않는 경우이 예외를 해결하십시오.

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

    4.최근에 비슷한 문제가 있었지만 문제는 항상 레코드가 DB에 존재한다는 것입니다. 그래서 몇 가지 조사를 한 결과, 캐시 된 엔티티가 제거 된 것으로 표시되고 DB에서 다시로드하기 전에로드가 실패했음을 발견했습니다. 그것은 최대 절전 모드에서 발생했습니다. 4.3.5 Final for me 그런 다음 문제점을 수정하는 것으로 보이는 Hibernate 4.3.11 Final로 업그레이드합니다.

    최근에 비슷한 문제가 있었지만 문제는 항상 레코드가 DB에 존재한다는 것입니다. 그래서 몇 가지 조사를 한 결과, 캐시 된 엔티티가 제거 된 것으로 표시되고 DB에서 다시로드하기 전에로드가 실패했음을 발견했습니다. 그것은 최대 절전 모드에서 발생했습니다. 4.3.5 Final for me 그런 다음 문제점을 수정하는 것으로 보이는 Hibernate 4.3.11 Final로 업그레이드합니다.

  5. ==============================

    5.귀하의 사례에 해당되는지 확실하지 않습니다.

    귀하의 사례에 해당되는지 확실하지 않습니다.

    그러나 나는 데이터베이스 테이블 X에서 직접 업데이트하고 필드 null을 설정하는 비슷한 문제가 있었지만 Java 클래스에서 필드는 @NotNull이었습니다.

    따라서 다른 클래스 Y가 ManyToOne을 가진 X 객체를 가졌을 때 엔티티의 null 값 때문에 엔티티를로드 할 수 없었습니다.

  6. ==============================

    6.다음을 시도하십시오.

    다음을 시도하십시오.

    @OneToMany (mappedBy = "yourMappingattributeName", cascade = CascadeType.ALL) 또는

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

    7.부모가 아닌 경우 @NotFound (action = NotFoundAction.IGNORE)를 사용하십시오.

    부모가 아닌 경우 @NotFound (action = NotFoundAction.IGNORE)를 사용하십시오.

    cascade = CascadeType.ALL을 사용하면 부모 엔티티가 삭제됩니다.

  8. from https://stackoverflow.com/questions/13539050/entitynotfoundexception-in-hibernate-many-to-one-mapping-however-data-exist by cc-by-sa and MIT license