JPA (Hibernate) Problem mit OneToOne annotation mappedBy
Ich habe zwei Tabellen, während ich setup eine oneToOne Beziehung.
Bill und BillSimpleEntry. (Jede Rechnung hat eine BillSimpleEntry
Hier ist die Struktur
CREATE TABLE `bill` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
..
..
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
KEY `fk_bill_groups1_idx` (`groupId`),
KEY `fk_bill_user1_idx` (`billPayerId`),
CONSTRAINT `fk_b...` FOREIGN KEY (`groupId`) REFERENCES `groups` (`id`) ON D ELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_b...` FOREIGN KEY (`billPayerId`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
DROP TABLE IF EXISTS `billsimpleentry`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `billsimpleentry` (
`..` varchar(200) DEFAULT NULL,
`..` text,
`billId` bigint(20) DEFAULT NULL,
`id` bigint(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
KEY `fk_bill_idx` (`billId`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
JPA-Konfiguration (Ausschnitt aus der bill-Entität für das oneToOne-Beziehung-Attribut).
@OneToOne(cascade=CascadeType.ALL,mappedBy="billId",fetch = FetchType.EAGER)
private BillSimpleEntry billSimpleEntry;
Ich versuche eine Verknüpfung zwischen Rechnung und BillSimpleEntry von billSimpleEntry.billId und bill.Id. Aber ich glaube, ich bekomme eine Fehlermeldung.
Hier ist die Fehlermeldung die ich bekomme-
Caused by: org.hibernate.AnnotationException: Referenced property not a (One|Many)ToOne:
com.uh.br.domain.BillSimpleEntry.billId in mappedBy of
com.uh.br.domain.Bill.billSimpleEntryry
Hier sind die Entitäten
Bill.java
@Entity
@Table(name = "bill")
public class Bill implements GenericObject {
/**
*
*/
private static final long serialVersionUID = -5660869020353250221L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
...
..
@OneToOne(cascade=CascadeType.ALL,fetch = FetchType.EAGER)
@JoinColumn(name="billId")
private BillSimpleEntry billSimpleEntry;
...
getters & setters
...
}
BillSimpleEntry.java
@Entity
@Table(name="billsimpleentry")
public class BillSimpleEntry implements GenericObject{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long billId;
@Column(columnDefinition="TEXT")
private String itemDescription;//napkin
...
...
...
getters & setters
...
- Sie werden versuchen, diese bidirektionale?
- Ich denke, es ist uni. Ich habe geantwortet, deine Antwort unten mit meiner Erklärung. danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
mappedBy
Attribut ist nur notwendig, wennbidirectional
Beziehung dieses element kann weggelassen werden auf der annotation. Es ist verwendet auf der Quell-Entität an eine Stelle zurück, um ein Feld auf die Ziel-Entität definiert, die Beziehung (enthält @JoinColumn).Den
@JoinColumn
Anmerkungen sollten sein gelegt auf diebillSimpleEntry
Feld definieren Sie die Spalte, die verwendet werden soll zum verknüpfen der beiden Tabellen. Im Falle einerOneToOne
gilt Folgendes:Hier ist ein code Beispiel:
Auch, wenn die
Bill
enthält dieSimpleBillEntry
Bereich derBILL
Tabelle enthalten soll ein Fremdschlüssel auf diebillsimpleentry
Tabelle.Bill
undBillSimpleEntry
Personen