【发布时间】:2018-10-16 01:18:01
【问题描述】:
我有代码可以使用 Hibernate 归档 @ManyToOne 关系。我有两个班级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 来创建 repo:
@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 中创建一个条目,并在地址中创建一个条目,并且目标地址ID 也指向右侧Address.id。然后我再次发送相同的 JSON 并休眠创建新的 Address 与之前的相同,它没有重用它。
我希望休眠检查地址是否存在,如果存在,它不会在表Address 中创建新行,而是使用已经存在的行。这在某种程度上是可能的吗?这种行为会创建两条重复的行(只有 ID 不同),这不是我想要的。感谢您的帮助!
【问题讨论】:
标签: java spring hibernate rest spring-boot