我是 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/