添加字符串数组到数据库中休眠(Add array of string to database in

2019-09-29 01:07发布

我在Hibernate框架的初学者,现在我集成Spring和Hibernate在一个项目。 我跑了就OK了,但它有一些我不明白为什么。 问题是:

我有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,当控制器调用对象保存到数据库中,我只是用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字符集数据库支持。

关于这事吗?

谢谢!

Answer 1:

您当前的代码试图调用持久的利益阵列上的toString的结果。

您需要可以设置你getInterests返回一个格式化字符串或映射到不同的表作为一个一对多的关系。 正如你可能要填充来自DB的利益,我会建议第二个选项(我有annoate做的领域,但你可以很容易地改变这种使用干将,其实我建议立即进行删除dprobabbly annoated我的干将):

 @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;


Answer 2:

我看过你的代码,我想在“ interests ”字段要存储阵列从任何价值观和一致,而从数据库中检索。 您需要使用enum类型的功能,但不知道你的数据库是支持或不? 我在我的项目之一相同的功能,我们使用了DB enum数据库,它是PostgreSQL的。 如果你的数据库不支持enum ,那么你必须使用OneToMany和要创建单独的表兴趣映射。



文章来源: Add array of string to database in Hibernate