我想做:
create table user (
id bigint primary key auto_increment,
firstname varchar(128),
lastname varchar(128),
street varchar(128),
zipcode mediumint,
city varchar(128)
)
然后:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String firstname;
private String lastname;
private Address address; // Here I want an Address rather than street, zip, and city directly inside User
...
}
和:
public class Address {
private String street;
private Integer zipcode;
private String city;
...
}
(这是一个示例)
如何使用Hibernate做到这一点? @OneToOne?这个问题似乎很简单,而且由于我在这里找不到解决方案,因此它必须很明显。
答案 0 :(得分:2)
首先,用Address
注释您的@Embeddable
类:
@Embeddable
public class Address {
/*class definition here*/
...
}
然后以这种方式更新用户类:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String firstname;
private String lastname;
@Embedded
private Address address;
...
}
就是这样。如果您需要更复杂的示例,请查看here。只需注意模型类的定义,无论您是否使用Spring Boot,只要使用JPA处理数据库,这都没有区别。
答案 1 :(得分:-1)
您可以使用@OneToOne注释通过一对一关系来关联实体。
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Address address;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
public Address getAddress()
{
return address;
}
}