Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在Hibernate中将字符串数组添加到数据库_Database_Spring_Hibernate_Spring Mvc - Fatal编程技术网

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

Database 在Hibernate中将字符串数组添加到数据库,database,spring,hibernate,spring-mvc,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; pr

我是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)
类来持久化对象

若数据库使用默认的字符集,那个么它可以运行,并且并没有任何错误,但当我在数据库系统中选择table时,它会显示一个不可读的字符串,类似于
,?[Ljava.lang.string;?ÒVçé{G xp t Quidditcht Herbology
。我想这是Hibernate给split的“占位符”,当我想读取并填充对象时

但问题是,如果数据库系统使用utf8字符集,它将无法运行,并引发类似于
错误字符串值的异常:'\xAC\xED\x00\x05ur…'对于第1行的“兴趣”列

我认为这是因为utf8字符集的数据库不支持该字符串

你知道吗


谢谢!

您当前的代码正在尝试保留在兴趣数组上调用toString的结果

您需要设置getInterests以返回格式化字符串或将其映射到另一个表作为onetomany关系。由于您可能希望从DB填充兴趣,我建议使用第二个选项(我有annoate do字段,但您可以轻松地将其更改为使用getters,事实上我应该使用dprobably annoate my getters):


我查看了您的代码,我认为在“
兴趣
”字段中,您希望存储数组中的任何值,并在从数据库检索时存储相同的值。 您需要使用
enum
这类功能,但不知道您的数据库是否支持? 我在我的一个项目中使用了相同的功能,我们在数据库中使用了DB
enum
,它是PostgreSQL。
如果您的数据库不支持
enum
,那么您必须使用
OneToMany
,并且必须为兴趣创建单独的表以进行映射。

正如您所说,我保留了调用兴趣数组上的toString的结果,为什么Hibernate在我读回它时可以清晰地读取它,尽管它是一个不可读的字符串?如果我更改了getInteRest返回格式化字符串,Hibernate能读回吗?我需要更改setInterests并进行拆分吗?现在我更改了
公共字符串getInterests(){//code here}
,并收到一条错误消息,因为属性是数组,所以get方法的返回需要是字符串数组。“为什么Hibernate可以在我读回它时清晰地读取它,尽管它是一个不可读的字符串?"这没有意义。Hibernate会将其读回为一个字符串,这就是我建议第二个选项的原因。但我建议您在启动Hibernate之前完全了解toString和通用java OOP。我只想将其保存为普通字符串,我可以使用空格标记将其拆分为字符串数组。因此,感谢您的回复!我可以吗我没有任何方法只使用字符串类而不需要使用其他实体?谢谢!我使用一些数据库系统,这取决于用户的选择。我需要考虑正确的方法。
 @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;