通过jpa保存List <string>而不创建新表

时间:2019-05-08 06:17:59

标签: jpa

类定义

@Entity
@Table(name = "t_domain")
public class Domain(){
 @Id
 String id;
 String fieldA;
 String fieldB;
 String fieldC;
 List<String> operations;
}

表定义

CREATE TABLE `t_domain`  (
  `id` varchar(38) ,
 `fieldA` varchar(255) ,
 `fieldB` varchar(255) ,
 `fieldC` varchar(255) ,
  `operations` varchar(255) ,
  PRIMARY KEY (`id`)
)

JSON

{"id":"1",
"fieldA":"a",
"fieldB":"b",
"fieldC":"c",
"operations":["a","b"]}

The ElementCollection values are always stored in a separate table.表示此页面['https://en.wikibooks.org/wiki/Java_Persistence/ElementCollection']。

在jpa 2.0中,@ElementCollection是保存集合的一种方法,但是它似乎需要一个新表来存储集合值。

问题: 我不想创建在domain_operation中定义的another_table_name@CollectionTable(name="another_table_name")这样的新表。

我只想将json保存到mysql中。

我正在使用Hibernate 4.3.11

2 个答案:

答案 0 :(得分:0)

忽略以下内容,它是指问题的原始版本

@ElementCollection
@CollectionTable(
    name="t_domain",
    joinColumns=@JoinColumn(name = "id", referencedColumnName = "id")
)
@Column(name="operations")

在未指定表名的情况下,Hibernate使用entityName_collectionName,在您的情况下为domain_operation

答案 1 :(得分:0)

您是否尝试过手动使用序列化器?

String operations;

@Transient
private ObjectMapper mapper;

public void setOperationsList(List<String> in) throws JsonProcessingException {
    operations = mapper.writeValueAsString(in);
}

public List<String> getOperationsList() throws IOException {
    return mapper.readValue(operations, new TypeReference<List<String>>(){});
}

}