相关疑难解决方法(0)

ORM映射中的"拥有方"是什么?

拥有方到底意味着什么?一些映射示例(一对多,一对一,多对一)的解释是什么?

以下文本摘自Java EE 6文档中对@OneToOne的描述.你可以看到这个概念拥有方在里面.

定义与具有一对一多重性的另一个实体的单值关联.通常不必明确指定关联的目标实体,因为它通常可以从被引用的对象的类型推断出来.如果关系是双向的,则非拥有方必须使用OneToOne批注的mappedBy元素来指定拥有方的关系字段或属性.

java mapping orm hibernate jpa

117
推荐指数
3
解决办法
3万
查看次数

@OneToOne单向和双向

我有两个例子,第一个是@OneToOne单向映射和第二个双向映射.在单向映射中,拥有方表必须包含引用另一个表的id的连接列; 然后在双向中它们都必须包含彼此的外键列.但是在使用自动生成策略生成数据库模式之后,两个示例对数据库模式具有相同的效果.单向映射是正常的,但双向示例只包含一个外键列,但它必须涉及彼此的外键!

单向映射

@Entity
public class Customer43 {

@Id
@GeneratedValue
private Long id;
private String firstName;
private String lastName;
private String email;
private String phoneNumber;
@OneToOne
@JoinColumn(name = "address_fk")
private Address43 address;

// Getters, Setters and Constructors.
}

@Entity
public class Address43 {

@Id
@GeneratedValue
private Long id;
private String street1;
private String street2;
private String city;
private String state;
private String zipcode;
private String country;

// Getters, Setters and Constructors.
}
Run Code Online (Sandbox Code Playgroud)

双向映射

@Entity
public class Customer44 {

@Id
@GeneratedValue …
Run Code Online (Sandbox Code Playgroud)

jpa one-to-one bidirectional-relation

10
推荐指数
1
解决办法
3万
查看次数

为什么懒惰加载不能在一对一关联中工作?

@Entity
public class Person {
    @Id
    @GeneratedValue
    private int personId;

    @OneToOne(cascade=CascadeType.ALL, mappedBy="person", fetch=FetchType.LAZY)
    private PersonDetail personDetail;

    //getters and setters
}

@Entity
public class PersonDetail {
    @Id
    @GeneratedValue
    private int personDetailId;

    @OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
    private Person person;

        //getters and setters

    }
Run Code Online (Sandbox Code Playgroud)

当我做

 Person person1=(Person)session.get(Person.class, 1);
Run Code Online (Sandbox Code Playgroud)

我看到两个问题被解雇了.一个用于获取人员数据,另一个用于获取人员详细数据.

根据我的理解,应该只触发1个查询,用于获取人员数据而非人员详细数据,因为我已经提到了延迟加载.为什么personDetail数据与人员数据一起被提取?

java hibernate lazy-loading

4
推荐指数
1
解决办法
1万
查看次数