2017-06-01 669 views
3

我有MySQL列聲明爲類型JSON和我有問題映射它與Jpa /休眠。我在後端使用Spring Boot。如何將mysql JSON列映射到JPA/Hibernate - Java

這裏是我的代碼小部分:

@Entity 
@Table(name = "some_table_name") 
public class MyCustomEntity implements Serializable { 

private static final long serialVersionUID = 1L; 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long id; 

@Column(name = "json_value") 
private JSONArray jsonValue; 

程序返回我一個錯誤,並告訴我,我不能映射列。

在MySQL表中的列定義爲:

json_value JSON NOT NULL;

+2

嘗試使用** columnDefinition =「json」**: @Column(name =「json_value」,columnDefinition =「json」) – adyjr

+0

請分享您收到的異常。 – eg04lt3r

+0

問題可以是JSONArray類型,因爲如果我將String放置在其他位置,則一切正常。 –

回答

0

如果你的JSON數組中的值是簡單的字符串,你可以這樣做:

@Type(type = "json") 
@Column(columnDefinition = "json") 
private String[] jsonValue; 
+0

'@ Type'是一個'org.hibernate.annotations.Type' – Christian

0

對於任何人都無法使@J。王回答工作:

嘗試添加此依賴(這是對Hibernate 5.1和5.0,其他版本檢查here

<dependency> 
    <groupId>com.vladmihalcea</groupId> 
    <artifactId>hibernate-types-5</artifactId> 
    <version>1.2.0</version> 
</dependency> 

這行添加到實體

@TypeDef(name = "json", typeClass = JsonStringType.class) 

所以完整版實體類:

@Entity 
@Table(name = "some_table_name") 
@TypeDef(name = "json", typeClass = JsonStringType.class) 
public class MyCustomEntity implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Type(type = "json") 
    @Column(columnDefinition = "json") 
    private List<String> jsonValue; 
} 

我使用spring boot 1測試代碼。 5.9和hibernate-types-5 1.2.0。