2017-06-01 666 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。