2015-11-06 307 views
0

我正在接收JSON請求的值的簡單列表部分,我希望將其保存爲逗號分隔值。嘗試使用以下,但它沒有奏效。JPA:將值列表保存爲逗號分隔值

@Column(nullable = true) 
@GeneratedValue(strategy = GenerationType.AUTO) 
private ArrayList<String> services = new ArrayList<String>() ; 

@Column(nullable = true) 
@ElementCollection(targetClass = String.class) 
private List<String> services = new ArrayList<String>() ; 

@ElementCollection拋出異常說table services does not exist

+1

ElementCollection仍然存儲在單獨的表中收集,每行一個字符串。我不知道你在哪裏讀取它將元素存儲爲逗號分隔值。您需要一個自定義類型或轉換的JPA屬性。此外,使用GeneratedValue註釋字符串列表沒有任何意義。 –

+1

您可以嘗試使用AttributeConverters作爲替代方法:http://hantsy.blogspot.com/2013/12/jpa-21-attribute-converter.html – Ish

回答

2

的@ElementCollection需要一個表來存儲值的倍數行,

所以,你可以定義爲一個字符串列,並加入/爆炸的getter和setter方法,這樣

private String services; 

public setServices(String services[]) //Can be Array or List 
{ 
    // this.services = Iterate services[] and create a comma separated string or Use ArrayUtils 
} 

public String[] getServices() //Can be Array or List 
{ 
    // services.split(",") to get a list of Strings, then typecast/parse them to Strings before returning or use Arrays.asList(arguments.split(",")); 
} 
+0

也可以將值存儲到臨時列表中,並將其轉換爲和從只有在寫入/讀取到數據庫時纔有字符串值。參見[Entity listeners](https://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/listeners.html) - 這會提高性能,因爲當yoe讀取時轉換不會總是發生/向實體寫入值。或者您也可以使用[AttributeConverter](http://hantsy.blogspot.com/2013/12/jpa-21-attribute-converter.html),如@Ish所示 – OndrejM