use*_*723 7 mapping orm hibernate jpa one-to-one
我设置了一个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;
Run Code Online (Sandbox Code Playgroud)
JPA配置(来自账单实体的片段为oneToOne关系属性).
@OneToOne(cascade=CascadeType.ALL,mappedBy="billId",fetch = FetchType.EAGER)
private BillSimpleEntry billSimpleEntry;
Run Code Online (Sandbox Code Playgroud)
我正试图通过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
Run Code Online (Sandbox Code Playgroud)
这是实体
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
...
Run Code Online (Sandbox Code Playgroud)
Kev*_*sox 18
该mappedBy属性仅对于bidirectional关系是必需的,该元素可以在注释上省略.它在源实体上用于指向定义关系的目标实体上的字段(包含@JoinColumn).
的@JoinColumn注释应被放置在billSimpleEntry字段定义应当用于连接两个表的列.在以下情况OneToOne下适用:
如果连接是使用外键映射策略进行OneToOne或ManyToOne映射,则外键列位于源实体的表中或可嵌入.
这是一个代码示例:
@OneToOne(cascade=CascadeType.ALL,fetch = FetchType.EAGER)
@JoinColumn(name="id")
private BillSimpleEntry billSimpleEntry;
Run Code Online (Sandbox Code Playgroud)
此外,如果Bill将包含该SimpleBillEntry字段,则BILL表应包含表的外键billsimpleentry.
| 归档时间: |
|
| 查看次数: |
27582 次 |
| 最近记录: |