私はpostgresデータベースを持っており、Spring Bootで簡単なRESTサービスを作ろうとしています。私はJPNのManytoMany関係に問題があります。Spring BootでJpa ManytoManyの問題
パーソンエンティティ:
@Entity
@Table(name = "person", schema = "persons")
public class Person implements Serializable {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Integer id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String email;
@Column
private Integer age;
@ManyToOne
@JoinColumn(name = "country_id", referencedColumnName = "id")
private Country countryOfBirth;
@ManyToMany
@JoinTable(
name="persons_countries_residence",
[email protected](name="person_id", referencedColumnName="id"),
[email protected](name="country_id", referencedColumnName="id"))
private List<Country> countriesOfResidence;
// getters and setters and to String method overriden
}
国エンティティ:
@Entity
@Table(name = "country", schema = "persons")
public class Country implements Serializable {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Integer id;
@Column(name = "country_name")
private String name;
@Column(name = "country_code")
private String code;
// getters and setters and to String method overriden
}
Postgresのスキーマは以下の通りです:
パーソン表:
CREATE TABLE persons.person
(
id serial NOT NULL,
name character varying(50) NOT NULL,
email character varying(40) NOT NULL,
age integer,
country_id serial NOT NULL,
CONSTRAINT id PRIMARY KEY (id),
CONSTRAINT country_id FOREIGN KEY (id)
REFERENCES persons.country (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
国テーブル:
CREATE TABLE persons.country
(
id serial NOT NULL,
country_name character varying(45) NOT NULL,
country_code character varying(10) NOT NULL,
CONSTRAINT country_id PRIMARY KEY (id)
)
テーブルに参加:私は、HTTPメソッドの呼び出しを行うと
CREATE TABLE persons.persons_countries_residence
(
person_id integer NOT NULL,
country_id integer NOT NULL,
CONSTRAINT person_country_id PRIMARY KEY (person_id, country_id),
CONSTRAINT persons_countries_residence_country_id_fkey FOREIGN KEY (country_id)
REFERENCES persons.country (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE NO ACTION,
CONSTRAINT persons_countries_residence_person_id_fkey FOREIGN KEY (person_id)
REFERENCES persons.person (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
、私は居住地の国を得ることはありません。
サービスコード:
@RequestMapping(method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
public List<Person> getAllPersons() {
retutn jpaPersonRepository.findAll();
}
すべてのヘルプ高く評価しました。
はい、国リストがヌルです。他のすべてのフィールドには値があります。 'fetch = FetchType.EAGER'を設定してもそれを解決できませんでした。 (persons.persons_countries_residenceテーブルには、存在する人と国の2つの既存IDが設定されています)。 – user3590899