F
fisherman
Gast
Hibernate: HQL INSERT in Tabelle mit eingebetteter Klasse
Hallo zusammen,
ich bastele gerade für Übungszwecke an einem Buchladen unter Zuhilfenahme von Hibernate/JPA und JSF.
Meine aktuelle Aufgabe ist es, aus den Tabellen Book und GenreType Daten zu holen und in der Tabelle BookGenre den Büchern Genres zuzuordnen. Nun ist mir unklar, wie das HQL-Statement dazu aussehen muss.
Dazu habe ich für die Tabelle BookGenre zwei Klassen erstellt:
Die Klasse BookGenrePK bildet einen kombinierten Primärschlüssel ab und ist in die Klasse BookGenre eingebettet:
Mit folgenden HQL-Statements habe ich es versucht:
Die Fehlermeldung dazu:
Das erscheint mir noch logisch.
Verwende ich im Statement stattdessen BookGenrePK:
erscheint die Meldung:
Allerdings ist die Klasse durchaus gemappt, sowohl in der hibernate.cfg.xml als auch in der persistence.xml.
Jemand eine Idee, wie das HQL-Statement aussehen müsste?
Hallo zusammen,
ich bastele gerade für Übungszwecke an einem Buchladen unter Zuhilfenahme von Hibernate/JPA und JSF.
Meine aktuelle Aufgabe ist es, aus den Tabellen Book und GenreType Daten zu holen und in der Tabelle BookGenre den Büchern Genres zuzuordnen. Nun ist mir unklar, wie das HQL-Statement dazu aussehen muss.
Dazu habe ich für die Tabelle BookGenre zwei Klassen erstellt:
Java:
@Embeddable
public class BookGenrePK implements Serializable {
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "genre_type", nullable = false, length = 50)
private String genreType;
@Column(name = "book_id", nullable = false)
private Long bookId;
// getter und setter, equals(), hashCode()
}
Die Klasse BookGenrePK bildet einen kombinierten Primärschlüssel ab und ist in die Klasse BookGenre eingebettet:
Java:
@Entity
@Table(name = "BOOK_GENRE")
public class BookGenre implements Serializable {
@EmbeddedId
private BookGenrePK bookGenrePk;
// getter und setter, equals(), hashCode()
}
Mit folgenden HQL-Statements habe ich es versucht:
Java:
"INSERT INTO BookGenre (bookId, genreType)
SELECT b.id, gt.name from Book b, GenreType gt
WHERE b.id = " + bookId + " and gt.name = '" + genreType + "'"
Die Fehlermeldung dazu:
Java:
java.lang.IllegalArgumentException: org.hibernate.QueryException:
could not resolve property: bookId of: BookGenre
Das erscheint mir noch logisch.
Verwende ich im Statement stattdessen BookGenrePK:
Java:
"INSERT INTO BookGenrePK (bookId, genreType) ...
erscheint die Meldung:
Java:
java.lang.IllegalArgumentException:
org.hibernate.hql.internal.ast.QuerySyntaxException:
BookGenrePK is not mapped
Allerdings ist die Klasse durchaus gemappt, sowohl in der hibernate.cfg.xml als auch in der persistence.xml.
Jemand eine Idee, wie das HQL-Statement aussehen müsste?