1. ホーム
  2. hibernate

[解決済み】Hibernateの問題 - "マッピングされていないクラスをターゲットにした@OneToManyまたは@ManyToManyの使用"

2022-02-01 13:23:29

質問

Hibernateアノテーションを使い始めてから、ある問題にぶち当たりました。

私は2つのエンティティ、セクションとScopeTopicを持っています。セクションはリストクラスのメンバーを持っているので、一対多の関係になっています。私はユニットテストを実行すると、この例外が発生します。

マッピングされていないクラスを対象とした@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;
    }
}


私の理解不足が原因だと思うので、ご指導いただけると助かります!ありがとうございます。

どのように解決するのですか?

アノテーションは問題ないようです。以下は確認事項です。

  • は、アノテーションが javax.persistence.Entity でなく org.hibernate.annotations.Entity . 前者は実体を検出できるようにします。後者は単なる付け足しです。

  • エンティティを手動でリストアップしている場合 (persistence.xml、hibernate.cfg.xml、またはセッションファクトリの設定時) は、必ず ScopeTopic エンティティ

  • が複数ないことを確認してください。 ScopeTopic クラスが異なるパッケージに入っていて、間違ったものをインポートしてしまったのです。