我是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;
}
}
在这个课程中,你看,我感兴趣的字段是显示多个复选框的字符串数组。
在DAO中,当控制器调用将对象保存到数据库时,我只使用Spring中的hibernateTemplate.saveOrUpdate(sample)
类来持久化对象。
如果数据库使用默认字符集,则可以,运行并且没有任何错误但是当我在数据库系统中选择表时,它会显示一个不可读的字符串,它类似于¬í ur [Ljava.lang.String;ÒVçé{G xp t Quidditcht Herbology
。我认为这是Hibernate在我想要阅读并填充对象时分配的“占位符”。
但问题是如果数据库系统使用utf8字符集,它无法运行,并抛出类似于Incorrect string value: '\xAC\xED\x00\x05ur...' for column 'interests' at row 1
的异常
我认为因为utf8字符集在数据库中不支持该字符串。
有任何想法吗?
谢谢!
答案 0 :(得分:2)
您当前的代码试图在interest数组上保留调用toString的结果。
您需要设置getInterests以返回格式化的字符串或映射到不同的表作为onetomany关系。由于你可能想要从DB中填充兴趣,我会推荐第二个选项(我已经做了字段,但你可以很容易地改变这个以使用getter,事实上我可以肯定地让我的getter消失了):
@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;
答案 1 :(得分:0)
我看了你的代码,我认为在“interests
”字段中你想要从数组中存储任何值,同时从数据库中检索它们。
您需要使用enum
类功能,但不知道您的数据库是否支持?
我在我的一个项目中具有相同的功能,我们在数据库中使用了DB enum
,它是PostgreSQL。
如果您的数据库不支持enum
,那么您必须使用OneToMany
并且必须为Interest创建单独的表以进行映射。