Tag: 一对一

ORM:Non Primary-Key Join列上的OneToOne映射 – 按ISBN映射的Book和Inventory

我有一个按ISBN号映射的Book模型和Inventory模型,但ISBN不是其中的主键。 书籍属于Bookstores,而Inventory是针对一组书店(BookstoreChain)。 库存由属于BookstoreChain的所有书店共享。 我正在书侧使用Hibernate @OneToOne映射来加入ISBN列来获取库存信息。 不知何故,Hibernate正确生成左外连接查询,但Book对象上的库存为空。 它也不是懒惰的。 忽略书店和连锁店,如何在提取书籍时进行OneToOne或ManyToOne连接并获取库存? class Book{ @Id Long id @Column String isbn; @Column String title; @OneToOne(optional = true) @JoinColumn(name = “isbn”, referencedColumnName = “isbn”,insertable = false, updatable = false) Inventory inventory; } class Inventory{ @Id Long id @Column String chainId @Column String isbn @Column Long availableQty }

JPA / Hibernate使用共享主键进行单向一对一映射

我正在努力获得与JPA(提供者:Hibernate)一起使用的单向一对一关系。 在我看来,这不应该是一个麻烦,但显然JPA / Hibernate不同意这一点;-) 问题是我必须映射一个我无法更改的遗留模式,并且此模式在两个实体之间使用共享主键,同时它是一个实体的外键。 我创建了一个简单的TestCase: DB如下所示: CREATE TABLE PARENT (PARENT_ID Number primary key, Message varchar2(50)); CREATE TABLE CHILD (CHILD_ID Number primary key, Message varchar2(50), CONSTRAINT FK_PARENT_ID FOREIGN KEY (CHILD_ID )REFERENCES PARENT (PARENT_ID)); CREATE SEQUENCE SEQ_PK_PARENT START WITH 1 INCREMENT BY 1 ORDER; 父母(=一对一的拥有方)如下所示: @Entity @Table(name = “PARENT”) public class Parent implements java.io.Serializable { private […]

Hibernate JPA一对一保存子类实体

我使用在父方注释的PrimaryKeyJoinColumn一对一的关系。 现在我想自己保存子实体。 例如,我有Employee和EmpInfo作为子实体,我需要保存EmpInfo (当然在设置父项的id属性之后)。 但是,当使用这样的安排时,我得到下面列出的例外…… org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist 有什么想法为什么hibernate不允许这个? 为了更清楚,我的代码如下…… ParentEntity: public class Employee { private Long id; private String name; private EmployeeInfo info; private Integer enumId; @Id @GeneratedValue(strategy=GenerationType.AUTO) public Long getId() { return id; } @Column(name=”EMP_NAME”) public String getName() { return name; } @PrimaryKeyJoinColumn @OneToOne(cascade = CascadeType.REMOVE) public EmployeeInfo getInfo() { […]

使用hibernate一对一引用完整性

我有两张桌子 – Foo {foo_id,name} Foo_properties {fp_id,foo_id,phoneNumber} 现在我想使用hibernate在我的对象模型中映射它。我需要在Foo_properties中使用foo_id,因为我想保持参照完整性并希望添加ON DELETE CASCADE约束。 所以我用以下方式映射关系 – @Entity public class Foo{ @Id private long foo_id; private String name; @OneToOne(mappedBy = “foo”) private FooProperties fooProperties; } @Entity public class FooProperties{ @Id private long fp_id; private String phoneNumber; @OneToOne @JoinColumn(name = “foo_id”, nullable = false) private Foo foo; } 既然拥有方是FooProperties类,我面临以下问题 – 如果我将FooProperties的新实例设置为Foo,则现有的FooProperties仍然保留在DB中,而hibernate不会删除该实例,例如 Foo […]

使用引用列进行Hibernate一对一映射(XML映射)

我有一个用户表和一对一映射user_detail表的user_detail表有一个字段user_id用于这个关系,它存储相应用户的id字段值。 如何为这种关系编写hibernate hbm文件? UPDATE 我的问题是用户的主键是id ,user_detail的外键是user_id 我在互联网用户中获得的所有示例user_id作为用户主键,与其他表中的外键相同

Hibernate中的可选一对一映射

如何在hibernate hbm文件中创建可选的一对一映射? 例如,假设我有一个User和一个last_visited_pa​​ge表。 用户可能有也可能没有last_visited页面。 这是我目前在hbm文件中的一对一映射: 用户类: LastVisitedPage类: 上面的示例不允许创建没有最后访问过的页面的用户。 新创建的用户尚未访问过任何页面。 如何更改hbm映射以使userPrefs映射可选?

为什么hibernate执行两个查询以急切加载@OneToOne双向关联?

我有实体A有一个B实体,而B有一个带有@OneToOne双向关联的A. 现在,当我找到所有A记录时,hibernate在B上执行左外连接的两个查询,如下所示: select a.id, a.id_b, a.field1, b.id, b.field1 from A as a, B as b left outer join b ON b.id=a.id_b; select a.id, a.id_b, a.field1, b.id, b.field1 from A as a, B as b left outer join b ON b.id=a.id_b WHERE b.id=? 首先查询加载A和B字段,这没关系,但为什么要执行第二次查询来重新加载A? 我认为这个查询加载了B中的A内容,但是这个A显然是包含B的A …所以它已经加载了第一个查询,是不是真的? – 编辑 – 实体A: @Entity public class A implements Serializable{ […]

需要一个Hibernate中主键@OneToOne映射的示例

有人可以给我一个Hibernate中单向@OneToOne主键映射的例子吗? 我尝试了很多组合,到目前为止,我得到的最好的事情是: @Entity @Table(name = “paper_cheque_stop_metadata”) @org.hibernate.annotations.Entity(mutable = false) public class PaperChequeStopMetadata implements Serializable, SecurityEventAware { private static final long serialVersionUID = 1L; @Id @JoinColumn(name = “paper_cheque_id”) @OneToOne(cascade = {}, fetch = FetchType.EAGER, optional = false, targetEntity = PaperCheque.class) private PaperCheque paperCheque; } 每当Hibernate尝试自动生成上述映射的模式时,它会尝试将主键创建为blob,而不是long,即PaperCheque的id类型。 有人能帮帮我吗 ? 如果我无法得到一个确切的解决方案,那么接近就会有所作为,但我会感激任何回应。