返回

如何让Hibernate自动建表时,将集合类型存储为字符串?

后端

如果在您的Java实体类中,某个属性的数据类型为列表,您可能希望在数据库表中,该字段以VARCHAR类型创建表字段。

问题:

Hibernate自动建表失败,集合类型无法以字符串的形式入库。

解决办法:

  1. 使用@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
}
  1. 使用@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
}
  1. 使用@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注解,将集合类型存储为字符串。