zur Karte habe ich zwei Tabellen: Bericht und flyleaf. Ein Bericht wird durch eine 'ID' und einen 'Index' identifiziert, die Fremd- und Primärschlüssel in der Vorblendtabelle sind.Hibernate Annotations 00.59 unidirektionale Verbindung mit zusammengesetzten Primärschlüssel
Das Schema der Tabellen sind:
CREATE TABLE `report` (
`id` int(11) NOT NULL,
`index` varchar(5) NOT NULL,
`nb_page` int(11) DEFAULT NULL
);
ALTER TABLE `report` ADD PRIMARY KEY (`id`,`index`);
CREATE TABLE `flyleaf_t` (
`id` int(11) NOT NULL,
`index` varchar(5) NOT NULL,
`title` varchar(30) DEFAULT NULL,
`author` varchar(30) DEFAULT NULL,
`checker` varchar(30) DEFAULT NULL
);
ALTER TABLE `flyleaf` ADD PRIMARY KEY (`id`,`index`);
ALTER TABLE `flyleaf` ADD CONSTRAINT `flyleaf_ibfk_1` FOREIGN KEY (`id`,`index`) REFERENCES `report` (`id`, `index`);
Ich benutze Hibernate Annotations diese Assoziation in unidirektionale Weise abzubilden. Wenn ich eine einfache Taste (nicht zusammengesetzt), es funktioniert gut natürlich, aber wenn ich versuche, ein „org.hibernate.TypeMismatchException“ zusammengesetzten Schlüssel verwenden wird mit der Meldung ausgelöst: „id vom falschen Typ für die Klasse lgmi_cr.Flyleaf bereitgestellt. Erwartet: Klasse lgmi_cr.Flyleaf, Klasse lgmi_cr.Report "
Wenn jemand bereits den gleichen Fall gesehen hat oder eine Vorstellung davon hat, wie man diese Assoziation in unidirektionaler Eins-zu-Eins-Weise darstellt, wird seine Hilfe geschätzt.
EDIT: Dies ist, wie Id die Zuordnung
@Entity
@Table(name="report")
public class Report implements Serializable{
@Id
@Column(name = "id")
private int id;
@Id
@Column(name = "index")
private String index;
@OneToOne
@JoinColumns({@JoinColumn(name="id", referencedColumnName="id"),
@JoinColumn(name="index", referencedColumnName="index")})
private Flyleaf flyleaf;
...
@Entity
@Table(name="flyleaf")
public class Flyleaf implements Serializable {
@Id
@Column(name = "id")
private int id;
@Id
@Column(name = "index")
private String index;
....
tat Und ich habe diese Ausnahme „org.hibernate.TypeMismatchException. Vorausgesetzt ID vom falschen Typ für die Klasse lgmi_cr.Flyleaf Erwartet: Klasse lgmi_cr .Flyleaf, bekam Klasse lgmi_cr.Report“
für Ihre Hilfe @nkmuturi. Ihre Lösung funktioniert und ich invertiere die unidirektionale Zuordnung (map ein Vorsatzblatt in einem Bericht). Würden Sie bitte mehr Details über den Code und den verwendeten Mechanismus geben (ich bin neu mit Hibernate)? –
Die ID-Annotation wird für die Zuordnung zu Tabellen verwendet, die einen einzelnen Primärschlüssel enthalten. Bei Tabellen mit zusammengesetzten Primärschlüsseln werden jedoch IdClass oder Embeddable verwendet. Sehen Sie weitere Erklärung hier http://www.objectdb.com/java/jpa/entity und dieses ebook http://www.ebooks.com/602765/beginning-hibernate/linwood-jeff-minter-dave/ für noch mehr. – nkmuturi
Ich habe gerade angefangen, dieses Buch zu lesen, und ich finde es sehr interessant. Ich habe nur eine weitere Frage, mit diesen Anmerkungen, wenn ich einen Bericht entferne, wird das zugehörige Vorsatzblatt automatisch entfernt oder ich muss einige Kaskadenparameter hinzufügen? Mit Ihrer Antwort denke ich, dass die Frage beantwortet wird. –