设置oneToOne关系时,我有两个表。Bill和BillSimpleEntry。(每个Bill都有一个BillSimpleEntry
这是他们的结构
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配置(票据实体的单据,用于oneToOne关系属性)。
@OneToOne(cascade=CascadeType.ALL,mappedBy="billId",fetch = FetchType.EAGER) private BillSimpleEntry billSimpleEntry;
我正在尝试通过billSimpleEntry.billId和bill.Id在Bill和BillSimpleEntry之间进行联接。但是我似乎出错了。
这是我得到的错误-
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
这是实体
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 ...
该mappedBy属性仅对于bidirectional关系是必需的,可以在注释上省略此元素。它在源实体上用于指向目标实体上定义关系的字段(包含@JoinColumn)。
mappedBy
bidirectional
的@JoinColumn注释应被放置在billSimpleEntry字段定义应当用于连接两个表的列。在以下情况OneToOne下适用:
@JoinColumn
billSimpleEntry
OneToOne
如果联接用于使用外键映射策略的OneToOne或ManyToOne映射,则外键列在源实体的表中或可嵌入。
这是一个代码示例:
@OneToOne(cascade=CascadeType.ALL,fetch = FetchType.EAGER) @JoinColumn(name="id") private BillSimpleEntry billSimpleEntry;
另外,如果Bill将包含SimpleBillEntry字段,则BILL表应包含该表的外键billsimpleentry。
Bill
SimpleBillEntry
BILL
billsimpleentry