Hibernate 문제- "매핑되지 않은 클래스를 대상으로하는 @OneToMany 또는 @ManyToMany 사용"


113

Hibernate Annotations로 내 발을 찾고 있는데 누군가가 도울 수 있기를 바라는 문제에 부딪 혔습니다.

2 개의 엔티티, Section 및 ScopeTopic이 있습니다. 섹션에는 List 클래스 멤버가 있으므로 일대 다 관계입니다. 단위 테스트를 실행할 때이 예외가 발생합니다.

매핑되지 않은 클래스를 대상으로하는 @OneToMany 또는 @ManyToMany 사용 : com.xxx.domain.Section.scopeTopic [com.xxx.domain.ScopeTopic]

오류가 내 ScopeTopic 엔터티가 테이블에 매핑되지 않았 음을 의미한다고 가정합니다. 나는 내가 잘못한 것을 볼 수 없습니다. 다음은 Entity 클래스입니다.


@Entity
public class Section {
    private Long id;
    private List<ScopeTopic> scopeTopics;

    public Section() {}

    @Id
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @OneToMany
    @JoinTable(name = "section_scope", joinColumns = {@JoinColumn(name="section_id")},
               inverseJoinColumns = {@JoinColumn(name="scope_topic_id")} )
    public List<ScopeTopic> getScopeTopic() {
        return scopeTopic;
    }

    public void setScopeTopic(List<ScopeTopic> scopeTopic) {
        this.scopeTopic = scopeTopic;
    }
}

@Entity
@Table(name = "scope_topic")
public class ScopeTopic {
    private Long id;
    private String topic;

    public ScopeTopic() {}

    @Id
    public Long getId() {
        return id;
    }

    public void setId() {
        this.id = id;
    }

    public String getTopic() {
        return topic;
    }

    public void setTopic(String topic) {
        this.topic = topic;
    }
}

나는 내 자신의 이해 부족이 잘못이라고 확신하므로 약간의 지침이 좋을 것입니다. 감사합니다!

답변:


247

주석이 괜찮아 보입니다. 확인해야 할 사항은 다음과 같습니다.

  • 주석이이 javax.persistence.Entity아니라 인지 확인하십시오 org.hibernate.annotations.Entity. 전자는 엔티티를 탐지 가능하게 만듭니다. 후자는 추가 일뿐입니다.

  • 엔티티를 수동으로 나열하는 경우 (persistence.xml, hibernate.cfg.xml 또는 세션 팩토리 구성시) ScopeTopic엔티티 도 나열했는지 확인하십시오.

  • ScopeTopic다른 패키지에 여러 클래스 가 없는지 , 잘못된 클래스를 가져 왔는지 확인하십시오.


19
아, 감사합니다! Point 2가 핵심이었습니다. SessionFactory를 생성 할 때 annotatedClasses 속성 목록에 ScopeTopic을 넣는 것을 잊었습니다. n00b 오류!
C0deAttack

4
이 댓글을 치는 사람들을 위해. org.hibernate.annotations.Entity는 Hibernate 4에서 폐기되었습니다. 포인트 1은 더 이상 적용되지 않습니다.
gspatel 2014

내 빌드 폴더에서 hibernate.cfg.xml을 계속 편집했기 때문에 포인트 2였습니다.
Torsten

Spring Boot에서 나는 여기에 문제가 생겼고 포인트 2는 내가 그것을 해결하는 데 도움이되었습니다. 나는 Spring Boot가 내 세션 팩토리를 자동으로 구성하도록하고 있었고, 한 브랜치에 새 엔티티를 추가했습니다 ... 그런 다음 하나가 병합되기 전에 세션 팩토리를 사용자 정의해야하는 또 다른 브랜치가있었습니다. 두 분기가 동시에 병합되었고이 문제에 나열된 오류가 발생했습니다. 세션 팩토리를 구성했고 다른 브랜치의 새 엔티티를 포함 할 생각이 없었기 때문에 새 엔티티는 더 이상 스프링 부트로 자동 스캔되지 않았습니다.
AEvans

내 경우에는 내가 사용하여 패키지를 검사하는 것을 잊었다packagesToScan
시바

24

내 것은 @Entity다방면에 존재 하지 않았다

@Entity // this was commented
@Table(name = "some_table")
public class ChildEntity {
    @JoinColumn(name = "parent", referencedColumnName = "id")
    @ManyToOne
    private ParentEntity parentEntity;
}

22

엔티티가 최대 절전 구성 파일에 나열되지 않을 수 있습니다.


7

대부분의 Hibernate, 필요성은 추가 Entity로 클래스를 hibernate.cfg.xml같은 -

<hibernate-configuration>
  <session-factory>

    ....
    <mapping class="xxx.xxx.yourEntityName"/>
 </session-factory>
</hibernate-configuration>

3

spring-data-jpa 프로젝트에서 Java 구성을 사용하는 경우 엔티티가있는 패키지를 스캔하고 있는지 확인하십시오. 예를 들어 엔티티가 com.foo.myservice.things에 살았다면 아래의 구성 주석은 그렇지 않습니다. 집어.

당신은 그것을 풀어서 고칠 수 있습니다 com.foo.myservice (물론 범위를 확장하여 엔티티를 스캔하는 다른 효과를 염두에 두십시오).

@Configuration
@EnableJpaAuditing
@EnableJpaRepositories("com.foo.myservice.repositories")
public class RepositoryConfiguration {
}

1

나는 같은 문제가 있었고 persistence.xml에 엔티티를 추가하여 해결할 수 있습니다. 이 문제는 엔티티가 지속성 구성에 추가되지 않았기 때문에 발생했습니다. 지속성 파일을 편집하십시오.

<persistence-unit name="MY_PU" transaction-type="RESOURCE_LOCAL">
<provider>`enter code here`
     org.hibernate.jpa.HibernatePersistenceProvider
  </provider>
<class>mypackage.MyEntity</class>

...


1

제 경우에는를 빌드 할 때 클래스를 추가해야합니다 SessionFactory.addAnnotationClass

Configuration configuration.configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
SessionFactory sessionFactory = configuration
            .addAnnotatedClass(MyEntity1.class)
            .addAnnotatedClass(MyEntity2.class)
            .buildSessionFactory(builder.build());
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.