设置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)。
的@JoinColumn
注释应被放置在billSimpleEntry
字段定义应当用于连接两个表的列。在以下情况OneToOne
下适用:
如果联接用于使用外键映射策略的OneToOne或ManyToOne映射,则外键列在源实体的表中或可嵌入。
这是一个代码示例:
@OneToOne(cascade=CascadeType.ALL,fetch = FetchType.EAGER)
@JoinColumn(name="id")
private BillSimpleEntry billSimpleEntry;
另外,如果Bill
将包含SimpleBillEntry
字段,则BILL
表应包含该表的外键billsimpleentry
。
问题内容: 这是我在阅读有关jpa批量插入的几个主题之后创建的简单示例,我有2个持久对象User和Site。一个用户可以拥有多个站点,因此我们在这里有一对多的关系。假设我要创建用户并将多个站点创建/链接到用户帐户。考虑到我愿意为Site对象使用批量插入,代码如下所示。 但是,当我运行此代码时(我将hibernate方式用作jpa实现提供程序),我看到以下sql输出: 所以,我的意思是“真实的”批量
问题内容: 有人可以透视一下JPA和Hibernate之间的区别吗?还是将这些互补的概念一起使用? 问题答案: 大致来说,JPA是java社区的一个标准,这里是specs,它是由Hibernate家伙实现(并扩展)的(此处提供一些信息)。作为规范,您将不会直接使用JPA,而是使用JPA实现。 请注意,如果要使用hibernateJPA扩展,将破坏与其他JPA实现的兼容性(尽管有些人会说“为什么要使
问题内容: 有一个结构。我想以这种方式链接这三个实体:公司应包含ID,公司名称和部门列表,每个部门都有一个工人列表,ID和部门名称。每个工人都有名字,身份证。 我试图与一对多和多对一建立联系,但未成功。 公司 部门 工人 我从开始: 它填充公司,但不填充其他表,也没有创建任何联接(映射)错误: 问题答案: 除了Glenn Lane的答案中提到的级联,您还需要了解双向关联是如何工作的。 它们有一个所
问题内容: 如果您正在使用xml映射,那么liquibase是hibernate的 hbm2ddl_auto 属性的完美替代方案。但是我使用的是JPA注释(hibernate注释)。那么可以使用liquibase吗? 问题答案: 是的,Liquibase使用了hibernate的元数据类,无论您使用xml映射还是注释,它们都是相同的。您确实需要一个hibernate配置文件来指向liquibase
问题内容: 我有一个使用枚举的数据库表。这已经可以与hibernate(使用XML)一起使用了,我正尝试将其转换为注释,因为这是仍在使用xml表示法的最后一部分。 列定义: 以下作品: 这不起作用: 注释样式在启动时导致以下异常:org.hibernate.HibernateException:UserDTO中列状态的列类型错误。找到:枚举,预期:varchar(255) 我有什么办法强迫它像使用
问题内容: 我有一张桌子DEAL和一张桌子DEAL_TYPE。我想映射以下代码: 问题在于数据已经存在于数据库中。而且我很难将类映射到数据库。 数据库看起来像这样: 我知道我可以在交易类型之间使用简单的@OneToMany关系,但是我更喜欢使用枚举。这可能吗? 我几乎可以通过使用EnumType.ORDINAL类型来使其工作。但不幸的是,我的交易类型表中的ID不是连续的,并且不是从1开始。 有什么