Hibernate-annotation viele-zu-eins-Zuordnung Erzeugung von ungerade-schema
Ich habe eine ziemlich einfache Viele zu-Eins-Beziehung zwischen zwei Klassen:
@Entity
public class Schedule
implements java.io.Serializable {
private String scheduleName;
private HashSet<Step> steps;
@OneToMany(mappedBy="schedule", cascade=CascadeType.ALL,
fetch=FetchType.EAGER)
public HashSet<Step> getSteps() {
return steps;
}
}
@Entity
public class Step implements java.io.Serializable {
private Long id;
private String duration;
private String stepType;
private Schedule schedule;
@ManyToOne(fetch=FetchType.LAZY)
public Schedule getSchedule() {
return schedule;
}
@Id
@GeneratedValue
public Long getId() {
return id;
}
}
Hibernate generiert die folgenden Tabellen (Postgres)
Table "public.schedule"
Column | Type | Modifiers
--------------+------------------------+-----------
uuid | character varying(255) | not null
version | integer |
schedulename | character varying(255) |
steps | bytea |
Table "public.step"
Column | Type | Modifiers
---------------+------------------------+-----------
id | bigint | not null
duration | character varying(255) |
steptype | character varying(255) |
temperature | numeric(19,2) |
schedule_uuid | character varying(255) |
Den Schritt Tabelle ist, was ich erwarte, aber ich verstehe nicht, warum die Schritte(bytea) - Spalte ist da. Mache ich etwas falsch in meinem mapping oder muss ich einfach nicht verstehen, wie hibernate funktioniert?
InformationsquelleAutor speshak | 2010-11-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich vermute, das problem ist, dass Sie eine konkrete
HashSet
statt derSet
- Schnittstelle. Versuchen Sie dies (vorausgesetzt, es hat eineId
irgendwo):Beachten Sie auch, wie ich initialisiert die Schritte Eigenschaft. Lassen Sie mich zitieren, die Dokumentation über diese:
Und stellen Sie sicher, dass:
@Id
Eigenschaft (der Teil, den Sie gerade zeigt, ist nicht genug, um zu bestätigen, dass).Step
ist die Umsetzungequals
/hashCode
korrekt (siehe Referenzen unten).Referenzen
Update: nicht reproduzieren Können (ich habe keine PostgreSQL installiert, indem ich nicht denke es ist, dass relevant ist). Ich verwendet die folgenden Entitäten:
Und:
Hier ist die generierte DDL:
Ich gar nicht verstehen, wie ein
HashSet
in IhremOneToMany
, Hibernate beschwert (wie erwartet um ehrlich zu sein), als ich versucht habe:Mit einem HashSet nicht Recht, aber etwas anderes könnte noch falsch sein. Tatsächlich, was ist das
MashStep
ich habe nicht bemerkt, früher? Können Sie genaue Zuordnungen?MashStep kopiert wurde, von der falschen Klasse war, wenn ich das snipping der nicht-interessante Dinge aus der Klasse. Ich habe aktualisiert die Frage korrekt zu sein. Ich habe auch versucht, hinzufügen targetEntity=Step.class zu meinem @OneToMany zu beheben Ausnahme war ich immer, kein Glück gibt.
Sind Sie mit der rechten
javax.persistence.Entity
annotation? Bedeutet der Schritt eineId
? Wie kann ich den reproduzieren?Ich habe die Entität annotiert werden, genau wie oben. Ich fügte die Anmerkungen, ich bin für Id zu Schritt. Ich bin mir nicht sicher über die Schritte zu reproduzieren, der code ist das, was oben zu sehen ist (minus Getter/setter, die sind nur diejenigen, die durch Sie generiert netbeans sowieso)
InformationsquelleAutor Pascal Thivent