В спящем режиме используйте объект, уже сохраненный в БД, для связи с владельцем, вместо создания нового, если объект принадлежит - PullRequest
0 голосов
/ 12 апреля 2020

Я новичок в hibernate, у меня есть проект весенней загрузки, использующий данные hibernate и spring jpa.

У меня есть сущность TestCase, у которой есть один Input JSON, разные TestCase могут иметь одинаковый Input JSON. Ниже приведен фрагмент

TestCase. java

@Id
@GeneratedValue(generator = "sequence-generator")
@SequenceGenerator(name = "sequence-generator", initialValue = 1, 
sequenceName = "test_case_id_sequence ", allocationSize = 50)
private long testCaseId;

private String name;

@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "input_JSON_ID")
private InputJSON inputJSON;
...

Вход JSON. java

@Id
@GeneratedValue(generator = "sequence-generator")
@SequenceGenerator(name = "sequence-generator", allocationSize = 50, 
sequenceName ="input_JSON_ID_Sequence",initialValue = 1)
private long inputJSONId;

private String json;
private String header;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "inputJSON")
private List<TestCase> testCase;

Я переопределяю equals () и hashcode () в обеих сущностях. Когда я сохраняю, как показано ниже, он работает нормально, и гибернат связывает мой тестовый сценарий с тем же входным сигналом Json.

InputJSON json1=new InputJSON();
json1.setHeader("header");
json1.setJson("json");

TestCase tc1=new TestCase();
tc1.setName("test1");
tc1.setInputJSON(json1);

TestCase tc2=new TestCase();
tc2.setName("test2");
tc2.setInputJSON(json1);

repository.save(tc1);
repository.save(tc2);

, но когда я сохраняю подобное, hibernate создает две строки для ввода JSON.

InputJSON json1=new InputJSON();
json1.setHeader("header");
json1.setJson("json");

InputJSON json2=new InputJSON();
json2.setHeader("header");
json2.setJson("json");

TestCase tc1=new TestCase();
tc1.setName("test1");
tc1.setInputJSON(json1);

TestCase tc2=new TestCase();
tc2.setName("test2");
tc2.setInputJSON(json2);

repository.save(tc1);
repository.save(tc2);

ОБНОВЛЕНИЕ:

Я получаю тестовый пример и вводю json информацию в DTO, проблема в том, что я получаю разные DTO для разных тестовых случаев, и мне нужно создать разумные модели из них. Чтобы знать, что два jsons равны, я должен программно c сравнить их перед сохранением в БД, чего я хочу избежать (если этого можно избежать), и позволить Hibernate обрабатывать их.

InputDTO. java

private String testCaseDescription;
private boolean skipTest;
private String params;
private String headerJson;
private String inputJson;

, где репозиторий - это автоматический проводной экземпляр моего JPARepository.

Есть ли способ или обходной путь в спящем режиме для создания только одной строки, если JSONS то же самое, я попробовал кое-что, и я знаю, что могу получить базу данных формы JSONS и сравнить их с моим новым json, и, если они одинаковы, использовать уже сохраненный вместо создания нового, У меня также есть некоторые раскопки по использованию равенства и хэш-кода в Hibernate, и я обнаружил, что Hibernates использует их только в Set.

1 Ответ

0 голосов
/ 12 апреля 2020

Вам нужно все изменить.

Вам нужно установить список testCase, а затем сохранить объект json1

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