MySQL hibernate - could not resolve entity class ... (Datenbank Anfänger)

torresbig

Mitglied
Hallo,

ich habe ein java programm, welches alle Daten immer in json Dateien abspeichert. nun wollte ich alles strukturiert neu machen (weil ich beim programmieren viel gelernt habe und einiges nicht schön war) und im selben zug eine sql Datenbank benutzen. Dazu habe ich mich ein wenig auch mit Hibernate beschäftigt. Eine Session (SessionFactory) kann ich aufbauen, aber bei der Abfrage kommt immer:

Code:
März 08, 2024 9:54:09 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate ORM core version 6.4.4.Final
März 08, 2024 9:54:09 PM org.hibernate.cache.internal.RegionFactoryInitiator initiateService
INFO: HHH000026: Second-level cache disabled
März 08, 2024 9:54:09 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using built-in connection pool (not intended for production use)
März 08, 2024 9:54:09 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: Loaded JDBC driver class: com.mysql.cj.jdbc.Driver
März 08, 2024 9:54:09 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001012: Connecting with JDBC URL [jdbc:mysql://localhost:3306/comuniofanapp]
März 08, 2024 9:54:09 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {password=****, user=root}
März 08, 2024 9:54:09 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
März 08, 2024 9:54:09 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH10001115: Connection pool size: 20 (min=1)
März 08, 2024 9:54:10 PM org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl constructDialect
WARN: HHH90000025: MySQL8Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
März 08, 2024 9:54:10 PM org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl logSelectedDialect
WARN: HHH90000026: MySQL8Dialect has been deprecated; use org.hibernate.dialect.MySQLDialect instead
März 08, 2024 9:54:10 PM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
java.lang.IllegalArgumentException: org.hibernate.query.sqm.UnknownEntityException: Could not resolve entity class 'klassen.database.Spieler'
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:143)
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:167)
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:173)
    at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:848)
    at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:136)
    at klassen.test.HibernateTest.testDatabaseConnection(HibernateTest.java:37)
    at klassen.test.HibernateTest.main(HibernateTest.java:29)
Caused by: org.hibernate.query.sqm.UnknownEntityException: Could not resolve entity class 'Spieler'
    at org.hibernate.query.hql.internal.StandardHqlTranslator.translate(StandardHqlTranslator.java:90)
    at org.hibernate.query.internal.QueryInterpretationCacheStandardImpl.createHqlInterpretation(QueryInterpretationCacheStandardImpl.java:165)
    at org.hibernate.query.internal.QueryInterpretationCacheStandardImpl.resolveHqlInterpretation(QueryInterpretationCacheStandardImpl.java:147)
    at org.hibernate.internal.AbstractSharedSessionContract.interpretHql(AbstractSharedSessionContract.java:790)
    at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:840)
    ... 3 more
Caused by: org.hibernate.query.sqm.EntityTypeException: Could not resolve entity class 'Spieler'
    at org.hibernate.metamodel.model.domain.internal.JpaMetamodelImpl.resolveEntityReference(JpaMetamodelImpl.java:490)
    at org.hibernate.metamodel.model.domain.internal.JpaMetamodelImpl.getHqlEntityReference(JpaMetamodelImpl.java:158)
    at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitRootEntity(SemanticQueryBuilder.java:1937)
    at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitRootEntity(SemanticQueryBuilder.java:269)
    at org.hibernate.grammars.hql.HqlParser$RootEntityContext.accept(HqlParser.java:2549)
    at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitEntityWithJoins(SemanticQueryBuilder.java:1914)
    at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitFromClause(SemanticQueryBuilder.java:1901)
    at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitQuery(SemanticQueryBuilder.java:1148)
    at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitQuerySpecExpression(SemanticQueryBuilder.java:941)
    at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitQuerySpecExpression(SemanticQueryBuilder.java:269)
    at org.hibernate.grammars.hql.HqlParser$QuerySpecExpressionContext.accept(HqlParser.java:1869)
    at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitSimpleQueryGroup(SemanticQueryBuilder.java:926)
    at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitSimpleQueryGroup(SemanticQueryBuilder.java:269)
    at org.hibernate.grammars.hql.HqlParser$SimpleQueryGroupContext.accept(HqlParser.java:1740)
    at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitSelectStatement(SemanticQueryBuilder.java:443)
    at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitStatement(SemanticQueryBuilder.java:402)
    at org.hibernate.query.hql.internal.SemanticQueryBuilder.buildSemanticModel(SemanticQueryBuilder.java:311)
    at org.hibernate.query.hql.internal.StandardHqlTranslator.translate(StandardHqlTranslator.java:71)
    ... 7 more

hier mal all meine Klassen und die Datenbankstruktur. vielleicht seht ihr ja woran es liegt. Hab auch schon stunden mit ChatGPT rumgemacht, aber alles half nicht.
Java:
package klassen.spieler;

import java.io.Serializable;
import java.util.Calendar;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import klassen.database.Spieler;


@Entity
@Table(name = "punktekorrekturen")
public class Punktekorrektur implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "spielerId")
    private Spieler spieler;
    
    @Column(name = "name")
    private String name;
    
    @Column(name = "suchname")
    private String suchname;
    
    @Column(name = "pointsBefore")
    private Integer pointsBefore;
    
    @Column(name = "pointsAfter")
    private Integer pointsAfter;
    
    @Column(name = "text")
    private String text;
    
    @Column(name = "date")
    private Calendar date;
    
    @Column(name = "inPunkteEingerechnet")
    private boolean inPunkteEingerechnet;
    
    @Column(name = "mitGeldabzug")
    private boolean mitGeldabzug;
        
    public Punktekorrektur() {
        super();
    }
        //getter und setter...
}

Java:
package klassen.spieler;

import java.io.Serializable;
import java.util.Calendar;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import klassen.database.Spieler;

@Entity
@Table(name = "spielerstats")
public class Statistik implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    
    @OneToOne
    @JoinColumn(name = "spielerId")
    private Spieler spieler;

    
    @Column(name = "totalPenalties")
    private int totalPenalties;
    
    @Column(name = "ratedGames")
    private int ratedGames;
    
    @Column(name = "playedGames")
    private int playedGames;
    
    @Column(name = "totalGoals")
    private int totalGoals;
    
    @Column(name = "manOfTheMatchAmount")
    private int manOfTheMatchAmount;
    
    @Column(name = "punkteDurchschnitt")
    private String punkteDurchschnitt;
    
    @Column(name = "notenDurchschnitt")
    private String notenDurchschnitt;
    
    @Column(name = "gelbekarten")
    private int gelbekarten;
    
    @Column(name = "rotekarten")
    private int rotekarten;
    
    @Column(name = "gelbrotekarten")
    private int gelbrotekarten;
    
    @Column(name = "lastUpdate")
    private Calendar lastUpdate;
    
    public Statistik() {
        super();
    }
        //getter und setter...
}

Java:
package klassen.database;

import java.io.Serializable;
import java.util.ArrayList;
import enu.IdentifierType;
import enu.Position;
import klassen.extender.Identifier;
import klassen.spieler.Punktekorrektur;
import klassen.spieler.Statistik;
import javax.persistence.*;


@Entity
@Table(name = "spieler_db")
public class Spieler implements Serializable {

    @Id
    @Column(name = "id")
    private int id;
    
    @Column(name = "name")
    private String name;

    private static final long serialVersionUID = 1L;
    
    @Column(name = "verein")
    private int verein;
    
    @Column(name = "owner")
    private int owner;
    
    @Column(name = "position")
    @Enumerated(EnumType.STRING) // Falls Position ein Enum ist
    private Position position;
    
    @OneToMany(mappedBy = "punktekorrektur", cascade = CascadeType.ALL)
    private ArrayList<Punktekorrektur> punktekorrekturen;
    
    @OneToOne(mappedBy = "statistik", cascade = CascadeType.ALL)
    private Statistik statistik;
    
    
    public Spieler() {
        super();
    }
    //getter und setter...
}


hibernate.cfg.xml
XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- DataSource settings -->
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/comuniofanapp</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>

<!-- Hibernate settings -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>

<!-- Mappings -->
<mapping class="klassen.database.Spieler"/>
<mapping class="klassen.spieler.Statistik"/>
<mapping class="klassen.spieler.Punktekorrektur"/>
</session-factory>
</hibernate-configuration>


hier nun die DB tabellen. die Datenbank heißt comuniofanapp

Tabelle spieler_db
SQL:
-- phpMyAdmin SQL Dump
-- version 5.2.1
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Erstellungszeit: 08. Mrz 2024 um 21:09
-- Server-Version: 10.4.32-MariaDB
-- PHP-Version: 8.2.12

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";

-
-- Tabellenstruktur für Tabelle `spieler_db`
--

CREATE TABLE `spieler_db` (
  `name` text NOT NULL,
  `id` int(11) NOT NULL,
  `verein` int(11) NOT NULL DEFAULT 0,
  `position` enum('TORHÜTER','ABWEHR','MITTELFELD','STURM','UNBESTIMMT') NOT NULL DEFAULT 'UNBESTIMMT',
  `owner` int(11) NOT NULL DEFAULT 0,
  `possibleNames` longtext NOT NULL,
  `punkte` int(11) NOT NULL,
  `wert` int(11) NOT NULL,
  `realWert` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Daten für Tabelle `spieler_db`
--
INSERT INTO `spieler_db` (`name`, `id`, `verein`, `position`, `owner`, `possibleNames`, `punkte`, `wert`, `realWert`) VALUES
('thomas', 1234, 1, 'ABWEHR', 2, 'Thomas, Tommy', 50, 160000, 5000000),
('andi', 5555, 3, 'STURM', 1, 'ANDY, Penner', 58, 880000, 1500000);

ALTER TABLE `spieler_db`
  ADD PRIMARY KEY (`id`) USING BTREE;
COMMIT;
punktekorrekturen tabelle:
SQL:
-
-- Tabellenstruktur für Tabelle `punktekorrekturen`
--

CREATE TABLE `punktekorrekturen` (
  `id` int(11) NOT NULL,
  `spielerId` int(11) NOT NULL,
  `pointsBefore` int(11) NOT NULL,
  `pointsAfter` int(11) NOT NULL,
  `suchname` text NOT NULL,
  `text` text NOT NULL,
  `date` date NOT NULL,
  `inPunkteEingerechnet` tinyint(1) NOT NULL,
  `mitGeldabzug` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Daten für Tabelle `punktekorrekturen`
--

INSERT INTO `punktekorrekturen` (`id`, `spielerId`, `pointsBefore`, `pointsAfter`, `suchname`, `text`, `date`, `inPunkteEingerechnet`, `mitGeldabzug`) VALUES
(1, 1234, 13, 25, 'TORRES', 'statt 13 hat er 15 punkte gemacht', '2024-01-25', 1, 0),
(2, 1234, 28, 40, 'TORRES', 'statt 28 hat er 40 punkte gemacht', '2024-01-25', 0, 1);

--
-- Indizes der exportierten Tabellen
--

--
-- Indizes für die Tabelle `punktekorrekturen`
--
ALTER TABLE `punktekorrekturen`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT für exportierte Tabellen
--

--
-- AUTO_INCREMENT für Tabelle `punktekorrekturen`
--
ALTER TABLE `punktekorrekturen`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
COMMIT;

spielerstats tabelle:
SQL:
--
-- Tabellenstruktur für Tabelle `spielerstats`
--

CREATE TABLE `spielerstats` (
  `id` int(11) NOT NULL,
  `spielerId` int(11) NOT NULL,
  `totalPenalties` int(11) NOT NULL,
  `ratedGames` int(11) NOT NULL,
  `playedGames` int(11) NOT NULL,
  `totalGoals` int(11) NOT NULL,
  `manOfTheMatchAmount` int(11) NOT NULL,
  `punkteDurchschnitt` double NOT NULL,
  `notenDurchschnitt` double NOT NULL,
  `gelbekarten` int(11) NOT NULL,
  `rotekarten` int(11) NOT NULL,
  `gelbrotekarten` int(11) NOT NULL,
  `lastUpdate` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Daten für Tabelle `spielerstats`
--

INSERT INTO `spielerstats` (`id`, `spielerId`, `totalPenalties`, `ratedGames`, `playedGames`, `totalGoals`, `manOfTheMatchAmount`, `punkteDurchschnitt`, `notenDurchschnitt`, `gelbekarten`, `rotekarten`, `gelbrotekarten`, `lastUpdate`) VALUES
(1, 1234, 1, 0, 0, 5, 0, 0, 0, 0, 1, 1, '0000-00-00'),
(2, 5555, 1, 0, 1, 7, 6, 0, 0, 1, 1, 1, '0000-00-00');

--
-- Indizes der exportierten Tabellen
--

--
-- Indizes für die Tabelle `spielerstats`
--
ALTER TABLE `spielerstats`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT für exportierte Tabellen
--

--
-- AUTO_INCREMENT für Tabelle `spielerstats`
--
ALTER TABLE `spielerstats`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
COMMIT;


ich weiß, ist sau viel, aber ich weiß nicht wo das problem ist.
 

M.L.

Top Contributor
Evtl. sollte man eher nach (elementareren) JDBC-Lösungen recherchieren (statt Frameworks --> youtube, Todesursache Hibernate)
 

torresbig

Mitglied
Evtl. sollte man eher nach (elementareren) JDBC-Lösungen recherchieren (statt Frameworks --> youtube, Todesursache Hibernate)
Oh OK. Dachte so orm frameworks wären viel besser.
Aber ja, viele Infos von youtube.

Kannst du mir dann ein Tipp geben, wie man es besser macht? Ich bin halt kein Typ, der sich durch englischsprachige dokumentationen ohne bildliche Darstellung wühlt. Da lerne ich leider nix und schalte zu schnell ab.
 

mihe7

Top Contributor
Oh OK. Dachte so orm frameworks wären viel besser.
Die Frameworks haben schon ihren Sinn. Man kann sie aber nicht blind einsetzen, sondern muss (halbwegs) wissen, was man tut.

Zum Problem ein paar Fragen:
  1. Die Klasse Spieler liegt schon in einem Ordner database unterhalb eines Ordners klassen, der sich wiederum in Deinen Sourcen befindet?
  2. Welches build-System verwendest Du?
  3. Wie sieht Deine HibernateTest-Klasse aus?
 

Oneixee5

Top Contributor
Wenn nicht irgendwo ein Tippfehler drin ist, dann würde ich vermuten, dass die IDE evtl. irgendwo ein Problem mit der Aktualität der Klassen hat. Hast du mal versucht einen 'clean' oder 'clean build' durchzuführen? Möglich auch über Maven oder notfalls die IDE beenden und den Inhalt des Ordners bin oder classes löschen. Dann die IDE wieder starten. Also irgend eine Art zu erzwingen, dass alles komplett neu gebaut wird.

Statt des Mappings kannst du auch mal versuchen:
XML:
<property name="hibernate.archive.autodetection">class, hbm</property>

Deine Namensgebung ist furchtbar. Das ist kein unmittelbarer Fehler aber du solltest dich da mal etwas informieren. Das denglisch ist furchtbar - entweder deutsch oder englisch - aber nicht mischen. Wobei ich es leichter finde, wenn man alles komplett in englisch schreibt. Manchmal passiert es sonst, dass man etwas liest und nicht versteht. Bis man merkt, dass es plötzlich deutsch ist. Auch ein Suffix '_db' bei einer Tabelle ... wozu?

Package Namenskonventionen:

-- Paketnamen ausschließlich in Kleinbuchstaben (notfalls _)
-- Paketnamen werden durch Punkte getrennt
-- die Namen werden auch durch das Unternehmen oder die Organisation bestimmt, die sie erstellt

Um den Paketnamen auf der Grundlage einer Organisation zu bestimmen, wird in der Regel zunächst die URL des Unternehmens/Organisation umgekehrt. Danach wird die Namenskonvention durch das Unternehmen festgelegt und kann Abteilungs-- und Projektnamen enthalten.

Um zum Beispiel ein Paket aus www.java-forum.org zu erstellen, kehren man es um:
org.java_forum
Ich bezweifle sehr stark, dass du Inhaber der Top-Level-Domain: 'klassen' oder der denglischen Domain: 'klassen.database' bist!

Vermutlich hat nicht jeder eine Domain, dann wäre es üblich so etwas wie: prj.project_name oder org.project_name zu verwenden.
 
Zuletzt bearbeitet:

torresbig

Mitglied
Die Frameworks haben schon ihren Sinn. Man kann sie aber nicht blind einsetzen, sondern muss (halbwegs) wissen, was man tut.

Zum Problem ein paar Fragen:
  1. Die Klasse Spieler liegt schon in einem Ordner database unterhalb eines Ordners klassen, der sich wiederum in Deinen Sourcen befindet?
  2. Welches build-System verwendest Du?
  3. Wie sieht Deine HibernateTest-Klasse aus?

ach ja... meine Vergaben von Klassen- und Ordnernamen lässt zu wünschen übrig. Aber ich nutze alles allein und hab damals so damit angefangen und finde mich gut zurecht.
Muss ich aber ggf. jetzt bei dem Neubau doch mal überarbeiten.

Ja, es liegt alles im richtigen Ordner. sonst würde auch Eclipse den Debug nicht starten. kompletter (ich weiß schlechter pfad: /ComunioAdvanced/src/main/java/klassen/database/Spieler.java

Ich verwende Eclipse und habe ein Maven Projekt erstellt.

hier die HibernatetTest klasse:

Java:
package klassen.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import klassen.database.Spieler;

import java.util.List;

public class HibernateTest {

    private static final SessionFactory sessionFactory;

    static {
        try {
            // Konfiguration der SessionFactory
            Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
            sessionFactory = configuration.buildSessionFactory();
        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
    public static void main(String[] args) {
        HibernateTest test = new HibernateTest();
        test.testDatabaseConnection();
    }
    public void testDatabaseConnection() {
        try (Session session = sessionFactory.openSession()) {
            Transaction tx = session.beginTransaction();

            // Beispielabfrage: Alle Spieler abrufen
            List<Spieler> spielerList = session.createQuery("FROM Spieler", Spieler.class).getResultList();

            for (Spieler spieler : spielerList) {
                System.out.println(spieler);
            }
            tx.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


Wenn nicht irgendwo ein Tippfehler drin ist, dann würde ich vermuten, dass die IDE evtl. irgendwo ein Problem mit der Aktualität der Klassen hat. Hast du mal versucht einen 'clean' oder 'clean build' durchzuführen? Möglich auch über Maven oder notfalls die IDE beenden und den Inhalt des Ordners bin oder classes löschen. Dann die IDE wieder starten. Also irgend eine Art zu erzwingen, dass alles komplett neu gebaut wird.

Statt des Mappings kannst du auch mal versuchen:
XML:
<property name="hibernate.archive.autodetection">class, hbm</property>

Deine Namensgebung ist furchtbar. Das ist kein unmittelbarer Fehler aber du solltest dich da mal etwas informieren. Das denglisch ist furchtbar - entweder deutsch oder englisch - aber nicht mischen. Wobei ich es leichter finde, wenn man alles komplett in englisch schreibt. Manchmal passiert es sonst, dass man etwas liest und nicht versteht. Bis man merkt, dass es plötzlich deutsch ist. Auch ein Suffix '_db' bei einer Tabelle ... wozu?

Package Namenskonventionen:

-- Paketnamen ausschließlich in Kleinbuchstaben (notfalls _)
-- Paketnamen werden durch Punkte getrennt
-- die Namen werden auch durch das Unternehmen oder die Organisation bestimmt, die sie erstellt

Um den Paketnamen auf der Grundlage einer Organisation zu bestimmen, wird in der Regel zunächst die URL des Unternehmens/Organisation umgekehrt. Danach wird die Namenskonvention durch das Unternehmen festgelegt und kann Abteilungs-- und Projektnamen enthalten.

Um zum Beispiel ein Paket aus www.java-forum.org zu erstellen, kehren man es um:
org.java_forum
Ich bezweifle sehr stark, dass du Inhaber der Top-Level-Domain: 'klassen' oder der denglischen Domain: 'klassen.database' bist!

Vermutlich hat nicht jeder eine Domain, dann wäre es üblich so etwas wie: prj.project_name oder org.project_name zu verwenden.

zur Namensgebung hab ich oben schon was geschrieben. Ich weiß, dass da noch potiential ist. Nutze es aber nur für mich und habe keine Domain oder so. Aber das sollte hier nicht das Problem sein.
Ein Clean hab ich schon mehrfach in Eclipse versucht, aber immer ohne Erfolg.

leider hat das Ändern des Mappings auch kein Erfolg gebracht.
 

torresbig

Mitglied
Wäre interessant, ob es funktioniert, wenn Du direkt per Maven startest. Eine module-info.java hast Du aber nicht im Projekt, oder?
ehrlich kenne ich mich damit auch nicht aus, aber ich kann mal gucken.

Übrigens, wenn das Mapping falsch ist, kommt diese Meldung:
Code:
Initial SessionFactory creation failed.org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [klassen.Spieler]

Habe jetzt auch einfach mal ChatGPT den ganzen SQL Code (mit allen Beziehungen) gegeben und mir die Klassen und alles erstellen lassen. Wollte nur mal testen wegen Tippfehlern oder sonstiges. Aber da kommt der selbe Fehler.

Auch Maven Clean, in Eclipse auch den Clean gemacht... klappt nciht.
Ich glaube ich mache es einfach doch umständlich und mache die Abfragen selbst ohne hibernate oder so.
 

M.L.

Top Contributor
module.info... nicht aus
Falls diese Datei benutzt werden soll, könnten die Einträge "requires hibernate.core;" und oder "requires hibernate.validator;" fehlen. Der Hinweis von wg. JDBC bezieht sich bildlich auf "selber Auto fahren" statt (mit falschen Karten...) dem Auto-Piloten (Hibernate, IBatis, JPA,...) zu vertrauen.
 

torresbig

Mitglied
Du musst nur schauen, ob Du unter src/main/java eine Datei module-info.java hast. Falls ja, hast Du eine modulare Anwendung und dort muss explizit deklariert werden, welche Module auf welche Pakete Zugriff haben.
Achso, nein... Die hab ich nicht.

Falls diese Datei benutzt werden soll, könnten die Einträge "requires hibernate.core;" und oder "requires hibernate.validator;" fehlen. Der Hinweis von wg. JDBC bezieht sich bildlich auf "selber Auto fahren" statt (mit falschen Karten...) dem Auto-Piloten (Hibernate, IBatis, JPA,...) zu vertrauen.
Ja, hab ich mir schon gedacht und damit haben natürlich auch meine tutorials, die ich geguckt habe angefangen. Dann kam aber Hibernate ins Spiel und wollte es halt direkt komfortabler machen.
Aber ggf mache ich es wirklich so. Scheint ja ein komischer Fehler zu sein. 😅
 

KonradN

Super-Moderator
Mitarbeiter
Falls ja, hast Du eine modulare Anwendung
Darf ich klugscheißen?

Die modulare Anwendung hat er auf jeden Fall. Nur ohne modules-info.java hat er ein unnamed module. Und unnamed modules haben ein export auf alle Packages und ein requires auf alle Packages im classpath.

Dass man aber eine modulare Anwendung hat, merkt man spätestens, wenn reflection ins Spiel kommt. Dann ist beim Start ggf. ein --add-opens notwendig, das dann halt gewisse Dinge öffnet.
 

torresbig

Mitglied
Ich hab das Problem in einem anderen forum gefunden.
Man darf wohl ab hibernate Version 6 nicht mehr die javax.persistence-api nehmen, sonder die jakarta.persistence-api

Jetzt kommen auf jeden Fall Fehler, dass einzelne Einträge nicht passen. Damit kann man arbeiten.
 

torresbig

Mitglied
Achso, und in der Spieler Klasse war das mapped by bei Punktekorrektur und Statistik falsch (war nur hier, im Projekt hatte ich das schon geändert). Muss natürlich "spieler" sein.
 

Oneixee5

Top Contributor
Ich hab das Problem in einem anderen forum gefunden.
Man darf wohl ab hibernate Version 6 nicht mehr die javax.persistence-api nehmen, sonder die jakarta.persistence-api

Jetzt kommen auf jeden Fall Fehler, dass einzelne Einträge nicht passen. Damit kann man arbeiten.
Auf die Antwort kommt doch niemand! Hibernate bindet man einfach mit:
XML:
<dependency>
    <groupId>org.hibernate.orm</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>6.4.4.Final</version>
</dependency>
ein. So etwas wie eine falsche interne Abhängigkeit gibt es da gar nicht. Das wird automatisch erledigt/gemanagt.
 

torresbig

Mitglied
Stimmt! Aber es gibt halt beides. Javax ist eh vorhanden und jarkata wird mit installiert. Wenn man dann javax nimmt, weil es halt da ist und in dem Tutorials überall verwendet wird, hatte ich den Fehler.
Du musst ja auswählen, ob z. B. @Id annouation der Import Javax oder jakarta sein soll


Ich poste später mal ein Screenshot, kann es schlecht erklären. 😅
 

KonradN

Super-Moderator
Mitarbeiter
Javax ist eh vorhanden
Die javax Packages, die du als jakarta eingebunden hast, solltest Du nicht haben! Es gibt noch javax Packages wie javax.swing vom JDK, aber Du solltest kein javax.persistence haben.

Wenn Du beides hast, dann deutet es auf Probleme bei Deinen Abhängigkeiten hin. Wenn beides nur als transitive Abhängigkeiten kommt, dann kann es sein, dass Du da Inkompatibilitäten hast.

Diese APIs sind zusammen gefasst in Java EE (javax., Versionen bis 8) oder Jakarta EE (jakarta, Versionen ab 9) und das würde ich nicht mischen.
 

torresbig

Mitglied
Die javax Packages, die du als jakarta eingebunden hast, solltest Du nicht haben! Es gibt noch javax Packages wie javax.swing vom JDK, aber Du solltest kein javax.persistence haben.

Wenn Du beides hast, dann deutet es auf Probleme bei Deinen Abhängigkeiten hin. Wenn beides nur als transitive Abhängigkeiten kommt, dann kann es sein, dass Du da Inkompatibilitäten hast.

Diese APIs sind zusammen gefasst in Java EE (javax., Versionen bis 8) oder Jakarta EE (jakarta, Versionen ab 9) und das würde ich nicht mischen.
Danke für die gute Erklärung. Das hab ich mal verstanden.
Ich schau mal alle durch, was ich in der maven pom drin hab, vielleicht ist die javax.persistence-api durch irgendwas anderes installiert worden. Manuell hab ich es definitiv nicht eingefügt.

Jedenfalls klappen alle meine abfragen jetzt problemlos und ich kann weiter machen. Hatte mir gedacht, dass es so ein dummer Fehler ist.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Hibernate: could not resolve property Datenbankprogrammierung 1
I Hibernate Predicate mit IN Clause "Unaware how to convert value to requested type" Datenbankprogrammierung 0
T org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ..., could not initialize proxy - no Session Datenbankprogrammierung 5
T Realisierungsvorschläge Hibernate SQL Datenbankprogrammierung 1
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
Zrebna Tabellen-Erzeugung via Hibernate ignoriert 'CascadeType' settings Datenbankprogrammierung 1
I Hibernate / JPA - Spaltenname von Query (Select) bekommen Datenbankprogrammierung 6
M Mysql Views und Hibernate Caching Datenbankprogrammierung 4
damike84 Hibernate: persistieren eines Graphen Datenbankprogrammierung 2
N Hibernate Entitäten bei Selects aus 2 Tabellen Datenbankprogrammierung 7
OnDemand Hibernate Realationen Datenbankprogrammierung 7
OnDemand Hibernate ManyToOne Datenbankprogrammierung 5
D Hibernate oneToMany Syntaxfehler Datenbankprogrammierung 3
D Hibernate Error: NoSuchMethodError Datenbankprogrammierung 4
D hibernate mit postgreSQL Datenbankprogrammierung 3
S MySQL Hibernate: Fehler bei Verwendung von 2 unterschiedlichen Enumration Datenbankprogrammierung 3
F Problem mit Hibernate c3p0 Datenbankprogrammierung 2
OnDemand MySQL Trigger löst nicht aus bei Hibernate Update Datenbankprogrammierung 12
OnDemand Hibernate OneToMany ManyToOne Datenbankprogrammierung 61
J Hibernate One-To-One mit Where Klausel Datenbankprogrammierung 6
L hibernate.cfg.xml Could not parse configuration Datenbankprogrammierung 0
L H2 Hibernate definieren? Datenbankprogrammierung 1
T JPA Mapping Enum (hibernate 5) Datenbankprogrammierung 1
H In hibernate.cfg.xml schreiben und auslesen Datenbankprogrammierung 0
K Hibernate: Ein Fluch Datenbankprogrammierung 3
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
K Eclipse: JBoss Hibernate Tool: Kein Zugriff auf Datenbank Datenbankprogrammierung 5
S JpaRepositories & Hibernate: ungewolltes trim() in findBy Datenbankprogrammierung 7
S MySQL hibernate exception: illegal state exception : entityManagerFactory is closed Datenbankprogrammierung 5
S Hibernate: Verschiedene Klassen zurückgeben. Datenbankprogrammierung 2
looparda Architektur für JPA Hibernate Umstieg Datenbankprogrammierung 14
O HSQLDB Hibernate Criteria Problem Datenbankprogrammierung 3
perlenfischer1984 Hibernate mit final members Datenbankprogrammierung 3
perlenfischer1984 Java Objecte speichern mit Hibernate ? Datenbankprogrammierung 2
N SQLite Hibernate und Aufruf von Funktion SELECT last_insert_rowid() Datenbankprogrammierung 2
N Sqlite3 und Hibernate Datenbankprogrammierung 3
A Hibernate Cache leeren Datenbankprogrammierung 4
I MySQL Hibernate zu viele Queries Datenbankprogrammierung 2
Psypsy Hibernate / JPA erkennen von schon gespeicherten Objekten Datenbankprogrammierung 4
Psypsy Hibernate / JPA OneToOne MappedBy Frage Datenbankprogrammierung 2
J Hibernate + DTOs - DTOs in DAOs verwenden? Datenbankprogrammierung 1
S Hibernate-Konfiguration : Unverständliche Ausgabe beim Ausführen Datenbankprogrammierung 0
I MySQL Hibernate / MySQL alias in WHERE clause Datenbankprogrammierung 1
J Hibernate + HSQL embedded Datenbankprogrammierung 2
P Hibernate Einstieg Datenbankprogrammierung 5
C Hibernate und createQuery Datenbankprogrammierung 2
V kennt jemand empfehlenswerte online tutorials zur Hibernate ? gerne auch englisch. Datenbankprogrammierung 4
G H2 Hibernate - wie joins machen Datenbankprogrammierung 1
D Hibernate: Zustand eines Objekts erkennen? Datenbankprogrammierung 0
D Unterschiede Hibernate Vs. Java Persistence API Datenbankprogrammierung 8
I Hibernate / JPA Index hinzufügen Datenbankprogrammierung 1
X Hibernate Cache Verständnisproblem Datenbankprogrammierung 0
T Hibernate und inner class Datenbankprogrammierung 0
K n:m Tabellen mit Hibernate erstellen Datenbankprogrammierung 1
T Hibernate DAO gute Tutorials/Bücher gesucht Datenbankprogrammierung 0
J Plug-In-Framework für Hibernate-Klassen Datenbankprogrammierung 0
M Hibernate - Save Child wenn nötig Datenbankprogrammierung 10
M DAO's + Hibernate Theorie Datenbankprogrammierung 4
T Hibernate, HSQLDB und UNIQUE Datenbankprogrammierung 2
F Hibernate - verschiedene Schemen Datenbankprogrammierung 7
D Hibernate SaveOrUpdate Exception Datenbankprogrammierung 2
D Hibernate CreateQuery ohne Result Datenbankprogrammierung 7
E MySQL Hibernate mit JaxWS führt zu LazyInitialization Exception Datenbankprogrammierung 8
L Einarbeitung in Hibernate -> wenn gute SQL Kenntnisse vorhanden? Datenbankprogrammierung 2
B DB2 Hibernate findet Datenbank nicht Datenbankprogrammierung 18
K JPA / Hibernate Annotations Datenbankprogrammierung 4
M JPA / Hibernate mit Postgres DB Datenbankprogrammierung 3
P JSF + H2 + TomEE + Hibernate/JPA Datenbank wird nicht angelegt Datenbankprogrammierung 3
E MySQL Hibernate ( Anfänger ) Datenbankprogrammierung 3
P Lazy-Fetchig und Session-Problem mit Hibernate Datenbankprogrammierung 4
J Hibernate Select auf Parameterliste Datenbankprogrammierung 3
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
P Oracle Hibernate - Oracle-VarChar-Index wird nicht genutzt Datenbankprogrammierung 3
M Hibernate Foreign Key definieren Datenbankprogrammierung 4
M Abstrakte Klassen Hibernate Datenbankprogrammierung 4
D Mit Hibernate (mit Annotation) auf Views zugreifen Datenbankprogrammierung 2
M [Hibernate]Abgleich eines lokalen Objekts mit dem Zustand aus der Datenbank. Datenbankprogrammierung 3
P Mit Hibernate mehrere Datensätze löschen Datenbankprogrammierung 7
P Probleme mit meinem 1. Hibernate Beispiel Datenbankprogrammierung 3
P erste Schritte mit Hibernate Datenbankprogrammierung 3
V Hibernate Interfaces von anderem Projekt Datenbankprogrammierung 2
J MySQL Datenbank konfigurieren, JDBC, MySQL oder Hibernate Datenbankprogrammierung 2
B Hibernate und portierbare Datenbank Datenbankprogrammierung 3
qwerqer [Hibernate] Mappingvarianten Datenbankprogrammierung 2
lumo Teneo Hibernate & JPA Datenbankprogrammierung 15
Z JPA mit Hibernate - Unable to build EntityManagerFactory Datenbankprogrammierung 7
Dit_ Hibernate, effiziente SQL-Abfrage definieren Datenbankprogrammierung 5
K Hibernate vs. JDBC Datenbankprogrammierung 4
J Hibernate Info 593 ? Datenbankprogrammierung 4
J Erstellen der SessionFactory in Hibernate 4.1 Datenbankprogrammierung 2
L PostgreSQL Hibernate-Frage Datenbankprogrammierung 2
X MySQL Hibernate: Massenupdate auf unbekannte Tabelle Datenbankprogrammierung 4
N hibernate: datasource Datenbankprogrammierung 7
H MySQL Hibernate: Updaten vereinfachen Datenbankprogrammierung 2
T Hibernate Division zweier Summen Datenbankprogrammierung 4
B MySQL Fehler: Cannot open connection mit Tomcat7, Hibernate und MySQL Datenbankprogrammierung 4
F GWT und Hibernate - gwt.dev.Compler not found Datenbankprogrammierung 3
M NestedTransaction- Exception in Hibernate Datenbankprogrammierung 15
O Löschen vieler Datensätze mit Hibernate Datenbankprogrammierung 11
C Hibernate n:m mittels Zwischentabelle und bidirektionaler Zugriff Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben