Я новичок в 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.