database - 在 Hibernate 中将字符串数组添加到数据库

标签 database spring hibernate spring-mvc

我是 Hibernate 框架的初学者,现在我在一个项目中集成了 Spring 和 Hibernate。 我运行正常,但它有一些我不明白为什么的东西。问题是:

我在这里描述了 bean 类:

@Entity
@Table(name = "Sample")
public class Sample {
    private int id;
    private String firstName;
    private String lastName;
    private String sex;
    private String[] interests;

@Id
@GeneratedValue
@Column(name = "id")
public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

@Column(name = "firstName")
public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

@Column(name = "lastName")
public String getLastName() {
    return lastName;
}

public void setSex(String sex) {
    this.sex = sex;
}

@Column(name = "sex")
public String getSex() {
    return sex;
}

public void setInterests(String[] interests) {
    this.interests = interests;
}

@Column(name = "interests")
public String[] getInterests() {
    return interests;
}
}

在这个类中,你看,我有 interests 字段是字符串数组,它显示了尽可能多的复选框。

在 DAO 中,当 Controller 调用将对象保存到数据库时,我只是使用 Spring 中的 hibernateTemplate.saveOrUpdate(sample) 类来持久化对象。

如果数据库使用默认字符集,没问题,运行并且没有任何错误,但是当我在数据库系统中选择表时,它显示一个不可读的字符串,它类似于 ¬í ur [Ljava.lang. String;ÒVçé{G xp t 魁地奇草药学 .我认为这是 Hibernate 在我想读取并填回对象时拆分的“占位符”。

但问题是如果数据库系统使用 utf8 字符集,它无法运行,并抛出类似于 Incorrect string value: '\xAC\xED\x00\x05ur...' for column 'interests' 的异常在第 1 行

我想是因为数据库不支持使用 utf8 字符集的字符串。

有什么想法吗?

谢谢!

最佳答案

您当前的代码试图保留对兴趣数组调用 toString 的结果。

您需要设置 getInterests 以返回格式化字符串或映射到不同的表作为一对多关系。因为你可能想从数据库中填充兴趣,我会推荐第二个选项(我有 annoate do 字段,但你可以很容易地改变它来使用 getters,事实上我应该 dprobabbly annoated 我的 getters):

 @OneToMany(mappedBy = "sample", cascade = CascadeType.ALL)    
    private List<Interests> interests;

兴趣可以是这样

 @Column(nullable = false, unique = false, length = 256)
    private String text;

    @ManyToOne
    @JoinColumn(nullable = false)
    private Sample sample;

关于database - 在 Hibernate 中将字符串数组添加到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16033704/

相关文章:

mysql - 如何将索引添加到日期时间列?

java - 使用Futures时Spring Boot超时

java - 错误 org.springframework.web.servlet.DispatcherServlet - 上下文初始化失败

java - 如何使用 Java 而不是 XML 将 hbase 与 Spring Boot 一起使用?

java - 使用按功能包约定将我的框架类放在哪里?

java.lang.NoSuchMethodError : org. hibernate.SessionFactory.openSession()Lorg/hibernate/Session;

php - 连接到数据库

database - PostgreSQL:通过命令行删除 PostgreSQL 数据库

mysql - 在单个查询中从多个表中获取数据

java - 如果事务回滚,CompassGps 会回滚吗?