在JPA中可以通过@OneToOne注解实现一对一关系映射。
@OneToOne注解:
- 用于定义一对一关系,该属性会映射到关联表中。
- 需要指定mappedBy或维护关联表来映射一对一关系。
mappedBy属性:
- 指定关系的维护端,当修改指定端的实体时会自动更新关联实体。
- 简单方便,避免手动维护一对一关系。
示例:
@Entity
public class User {
@Id
private int id;
@OneToOne(mappedBy = "user")
private Account account;
}
@Entity
public class Account {
@Id
private int id;
@OneToOne
@JoinColumn(name="user_id")
private User user;
}
上例定义了User和Account的一对一关系,其中:
- User的account属性配置mappedBy指定Account的user属性维护这一关系。
- 当对Account的user属性赋值或修改时,会自动更新User的account属性,实现双向关系维护。
维护关联表:
- 需要在映射一对一关系的两端各配置一张表,两张表通过主键关联建立一对一关系。
- 这种方式较为复杂,需要手动维护一对一关系,但也更加灵活。
示例:
@Entity
public class User {
@Id
private int id;
@OneToOne
@JoinColumn(name="info_id")
private Info info;
}
@Entity
public class Info {
@Id
@Column(name="info_id")
private int id;
}
上例通过info属性映射到Info实体的主键,建立一对一关系映射,但需要手动维护两实体的关系。
一对一关系的查询:
- 可以从任一端查询关联的实体对象。
- 使用映射的属性直接获取关联的实体对象。