返回
如何让Hibernate自动建表时,将集合类型存储为字符串?
后端
2024-02-14 06:50:11
如果在您的Java实体类中,某个属性的数据类型为列表,您可能希望在数据库表中,该字段以VARCHAR类型创建表字段。
问题:
Hibernate自动建表失败,集合类型无法以字符串的形式入库。
解决办法:
- 使用@CollectionTable注解
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@CollectionTable(name = "student_addresses", joinColumns = @JoinColumn(name = "student_id"))
@Column(name = "address")
private List<String> addresses;
// getters and setters
}
- 使用@ElementCollection注解
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ElementCollection
@CollectionTable(name = "student_addresses", joinColumns = @JoinColumn(name = "student_id"))
@Column(name = "address")
private List<String> addresses;
// getters and setters
}
- 使用@JoinColumn注解
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany
@JoinColumn(name = "student_id")
private List<Address> addresses;
// getters and setters
}
@Entity
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String address;
// getters and setters
}
注意:
- 使用@CollectionTable注解时,需要在目标实体上使用@ElementCollection注解。
- 使用@JoinColumn注解时,需要在目标实体上使用@OneToMany注解。
总结:
在使用Hibernate时,可以通过使用@CollectionTable、@ElementCollection或@JoinColumn注解,将集合类型存储为字符串。