私はSpring Frameworkを学んでいます。関係1-1のいくつかのチュートリアルに従ったので、モデルを定義しました.1つのライブラリには1つのアドレスがあります. ボディリクエストでライブラリデータとアドレスからのIDを送信すると、スプリングがレコードを作成しますが、彼は関係を作成できず、アドレスnull
を返し、データベースで選択するとaddress_id
、テーブルライブラリに保存されません
これは私が試したものです:
私のモデルライブラリ:
@Entity
@Table(name = "Bibliotecas")
public class Library implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String name;
@OneToOne
@JoinColumn(name = "address_id", referencedColumnName = "id")
private Address address;
public Library() {
}
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Address getAddress() {
return this.address;
}
public void setAddress(Address address) {
this.address = address;
}
}
私のモデル住所:
@Entity
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(nullable = false)
private String location;
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public String getLocation() {
return this.location;
}
public void setLocation(String location) {
this.location = location;
}
@OneToOne(mappedBy = "address", fetch = FetchType.LAZY, optional = false)
private Library library;
}
私のリポジトリ:
public interface LibraryRepository extends JpaRepository<Library, Long> {}
public interface AddressRepository extends JpaRepository<Address, Long> {}
私のライブラリリソース:
@RestController
@RequestMapping(value = "/api")
public class LibraryResource {
@Autowired
LibraryRepository libraryRepository;
@GetMapping("/libraries")
public List<Library> listaBibliotecas() {
return libraryRepository.findAll();
}
@PostMapping("/library")
public Library salvaBiblioteca(@RequestBody Library library) {
return libraryRepository.save(library);
}
}
Postman でこのリクエストを行います。
{
"name": "library test",
"address_id": 1
}
Obs: データベースに ID 1 のアドレスが 1 つありますが、次のメッセージが表示されます。
{
"id": 5,
"name": "Biblioteca test",
"address": null
}
リターンで null を受け取るのはなぜですか? そして、なぜ私のレジスタが保存されていないのaddress_id
ですか?