it-swarm.com.de

Problem mit dem Ruhezustand - "Verwendung von @OneToMany oder @ManyToMany als Ziel für eine nicht zugeordnete Klasse"

Ich finde meine Füße mit Hibernate Annotations und ich habe ein Problem gefunden, von dem ich hoffe, dass jemand helfen kann.

Ich habe 2 Entitäten, Section und ScopeTopic. Die Sektion hat ein List-Klassenmitglied, also eine Beziehung von Eins zu Viele. Wenn ich meinen Gerätetest durchführe, erhalte ich diese Ausnahme:

Verwendung von @OneToMany oder @ManyToMany als Ziel für eine nicht zugeordnete Klasse: com.xxx.domain.Section.scopeTopic [com.xxx.domain.ScopeTopic]

Ich würde davon ausgehen, dass der Fehler bedeutet, dass meine ScopeTopic-Entität keiner Tabelle zugeordnet ist. Ich kann nicht sehen, dass ich falsch gemacht habe. Hier sind die Entity-Klassen:


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

Ich bin mir ziemlich sicher, dass es an meinem eigenen mangelnden Verständnis liegt, also wäre eine Anleitung großartig, danke!

90
C0deAttack

Ihre Anmerkungen sehen gut aus. Hier sind die Dinge zu überprüfen:

  • stellen Sie sicher, dass die Anmerkung javax.persistence.Entity und nicht org.hibernate.annotations.Entity lautet. Ersteres macht die Entität nachweisbar. Letzteres ist nur eine Ergänzung.

  • wenn Sie Ihre Entitäten manuell auflisten (in persistence.xml, in hibernate.cfg.xml oder beim Konfigurieren der Sitzungsfactory), stellen Sie sicher, dass Sie auch die Entität ScopeTopic aufgelistet haben

  • stellen Sie sicher, dass Sie nicht mehrere ScopeTopic-Klassen in verschiedenen Paketen haben und die falsche importiert haben.

209
Bozho

Ihre Entität wird möglicherweise nicht in der Hibernate-Konfigurationsdatei aufgeführt.

19
ChetanSankhala

Meines war @Entity nicht auf der vielen Nebenentität

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

In Hibernate müssen Sie meistens die Entity-Klasse in hibernate.cfg.xml hinzufügen. 

</hibernate-configuration>
  </session-factory>

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

Ich hatte das gleiche Problem und konnte es lösen, indem ich die Entität in persistence.xml hinzufügte .. Das Problem wurde dadurch verursacht, dass die Entität nicht zur Persistenz-Konfiguration hinzugefügt wurde. Bearbeiten Sie Ihre Persistenzdatei:

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

...

0
enka

Wenn Sie die Konfiguration Java in einem spring-data-jpa-Projekt verwenden, stellen Sie sicher, dass Sie das Paket scannen, in dem sich die Entität befindet. Wenn die Entität beispielsweise gelebt hat com.foo.myservice) .things dann würde die folgende Konfigurationsanmerkung es nicht aufheben.

Sie können das Problem beheben, indem Sie es einfach auf com.foo.myservice lockern.

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

In meinem Fall muss a meine Klassen hinzufügen, wenn Sie die SessionFactory mit addAnnotationClass erstellen.

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