сохранить список <String>по jpa без создания новой таблицы - PullRequest
0 голосов
/ 08 мая 2019

Определение класса

@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`)
)

1007 * JSON *

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

С этой страницы ['https://en.wikibooks.org/wiki/Java_Persistence/ElementCollection'],said The ElementCollection values are always stored in a separate table..

В jpa 2.0 @ElementCollection - это способ сохранения коллекции, но, как выяснилось, нужна новая таблица для хранения значения коллекции.

Вопрос: Я не хочу создавать какие-либо новые таблицы, такие как domain_operation или another_table_name defind в @CollectionTable(name="another_table_name").

Я хочу сохранить JSON в MySQL только в одном ряду.

Я использую Hibernate 4.3.11

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Вы пытались вручную использовать сериализатор?

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>>(){});
}

}

0 голосов
/ 08 мая 2019

Игнорировать ниже, это относится к оригинальной версии вопроса

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

Без указания имени таблицы Hibernate использует entityName_collectionName, что в вашем случае дает domain_operation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...