休止状態の問題-「マッピングされていないクラスをターゲットとする@OneToManyまたは@ManyToManyの使用」


113

私はHibernate Annotationsで足を見つけています。問題が発生しました。誰かが手伝ってくれるといいのですが。

SectionとScopeTopicの2つのエンティティがあります。セクションにはListクラスのメンバーがあるため、1対多の関係です。単体テストを実行すると、次の例外が発生します。

マップされていないクラスを対象とする@OneToManyまたは@ManyToManyの使用:com.xxx.domain.Section.scopeTopic [com.xxx.domain.ScopeTopic]

このエラーは、ScopeTopicエンティティがテーブルにマップされていないことを示していると思いますか?私は間違ったことを見ることができません。エンティティクラスは次のとおりです。


@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
あ、ありがとう!ポイント2が鍵でした。SessionFactoryを作成するときに、ScopeTopicをannotatedClassesプロパティリストに入れるのを忘れていました。n00bエラーです。
C0deAttack

4
このコメントを押すだけの人のために。org.hibernate.annotations.EntityはHibernate 4で非推奨になりました。ポイント1はもう適用されません。
gspatel 14

私にとっては、ビルドフォルダーのhibernate.cfg.xmlを編集し続けたため、ポイント2でした。
Torsten、

Spring Bootで、ここで問題が発生しました。ポイント2は、それを解決するのに役立ちました。私はSpring Bootにセッションファクトリを自動構成させており、1つのブランチに新しいエンティティを追加しました...その後、そのエンティティがマージされる前に、セッションファクトリをカスタマイズする必要がある別のブランチがありました。両方のブランチが同時にマージされ、この問題にリストされているエラーが発生しました。セッションファクトリーを構成していて、他のブランチからの新しいエンティティーを含めることを考えていなかったため、私の新しいエンティティーはスプリングブートによって自動スキャンされなくなりました。
AEvans 2016年

私の場合、パッケージをスキャンするのを忘れていましたpackagesToScan
Siva

24

鉱山は@Entity多面的実体を持っていなかった

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

22

エンティティがhibernate構成ファイルにリストされていない可能性があります。


7

ほとんどの場合でHibernate追加する必要、Entityでクラスをhibernate.cfg.xmllike-

<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

私の場合はビルドする際に、私のクラスを追加する必要がありますSessionFactoryし、addAnnotationClass

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

0

同じ問題があり、persistence.xmlにエンティティを追加することで解決できました。この問題は、エンティティが永続構成に追加されなかったために発生しました。永続化ファイルを編集します。

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

...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.