2013-04-16 29 views
1

我是Hibernate框架的初學者,現在我在一個項目中集成了Spring和Hibernate。 我跑它確定,但它有我不明白爲什麼。問題是:在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字符集數據庫支持。

對此有何想法?

謝謝!

回答

2

你當前的代碼試圖在interest數組上調用toString的結果。

您需要設置getInterests以將格式化的字符串或映射返回到另一個表中,作爲一個onomanomany關係。正如你可能要填充來自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; 
+0

正如你所說,我堅持在interest數組上調用toString的結果,爲什麼Hibernate在讀取它時會清楚地讀取它,儘管它是一個不可讀的字符串? 如果我改變getInterests返回一個格式化的字符串,可以讓Hibernate讀回來嗎?我需要改變setInterests和split嗎? –

+0

現在我改變了'public String getInterests(){// code here}',並且我收到一條錯誤消息,你知道,因爲屬性是數組,get方法的返回需要是一個字符串數組。 –

+0

關於你的第一個選擇? –

0

我看過你的代碼,我想在「interests」字段要存儲陣列從任何價值觀和一致,而從數據庫中檢索。 您需要使用enum類型的功能,但不知道您的數據庫是否支持? 我在我的項目中有一個相同的功能,我們在數據庫中使用DB enum,它是PostgreSQL。 如果你的數據庫不支持enum,那麼你必須使用OneToMany,並且必須爲映射興趣創建單獨的表。

+0

謝謝!我使用一些數據庫系統,這取決於用戶的選擇。我需要考慮正確的方式。 –