У меня есть код для архивирования @ManyToOne
отношения с помощью Hibernate. У меня есть два класса Package
и Address
. В Address
я хотел бы иметь уникальные записи, где каждый адрес чем-то отличается от другого. Тогда у меня есть Package
, который использует его.
@Entity
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, updatable = false)
private Long id;
String street_with_number;
String city;
String region;
//...
}
@Entity
public class Package {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, updatable = false)
private Long id;
String eshopId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="destination_address_id")
private Address destination_address;
//...
}
Тогда у меня есть JpaRepository для создания репо:
@RepositoryRestResource
public interface PackageRepository extends JpaRepository<Package, Long> {
//...
}
После этого я использую его в контроллере REST
@RestController
@RequestMapping("/api/")
public class RestController {
private PackageRepository packageRepository;
@Inject
public void setRepository(PackageRepository packageRepository) {
this.packageRepository = packageRepository;
}
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<?> addPack(@RequestBody Package pack) {
return new ResponseEntity<>(packageRepository.save(pack), HttpStatus.CREATED);
}
}
Затем, используя HTTP REST, я отправляю json вот так
{
"eshopId" : 1,
"destination_address": {
"street_with_number": "string",
"city": "string",
"region": "string"
}
}
, которая создает одну запись в таблице Package
и одну в адресе с OK, а также destination_address_id, указывающий вправо Address.id
. Затем я снова отправляю тот же JSON, и hibernate создает новый Address
, такой же, как тот, что был раньше, и не использует его повторно.
Я бы хотел, чтобы hibernate проверил, существует ли адрес, и если да, он не создаст новую строку в таблице Address
, а использует ту, которая уже существует. Это как-то просто возможно? Такое поведение создает две повторяющиеся строки (отличается только идентификатор), что не то, что я хочу. Спасибо за любую помощь!