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

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

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



답변

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

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

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

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


답변

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

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


답변

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


답변

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

<hibernate-configuration>
  <session-factory>

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


답변

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

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

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


답변

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

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


답변

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

Configuration configuration.configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
SessionFactory sessionFactory = configuration
            .addAnnotatedClass(MyEntity1.class)
            .addAnnotatedClass(MyEntity2.class)
            .buildSessionFactory(builder.build());