2016-07-01 8 views
0

に@JoinColumnとSpringのエンティティを受信:は、私はこれらのテーブルを持ってRESTfulなWebサービス

CREATE TABLE ref.doc (
    id  serial PRIMARY KEY, 
    iddoc integer NOT NULL UNIQUE, 
    docname varchar(254) NOT NULL 
); 

CREATE TABLE person (
    id  serial PRIMARY KEY, 
    name  varchar(40) DEFAULT NULL, 
    doctype integer DEFAULT NULL REFERENCES ref.doc(iddoc) 
); 

私はJSONsを受信して​​、いくつかの検証後、データベースに保存します春を使用してRESTfulなWebサービスを構築する必要があります。たとえば、iddoc = 2のレコードがref.docにあります。だから、personのためのJSONは次のようになります。

{ 
    "name": "John", 
    "doctype": 2 
} 

そして、私はこのような何かやりたい:

@RestController 
public class PersonController { 

    @Autowired 
    PersonRepository personRepository; 

    @Transactional 
    @RequestMapping(value = "/add", method = RequestMethod.POST) 
    @ResponseBody 
    public Person add(@RequestBody Person person) { 
     // some logic 
     personRepository.saveAndFlush(person); 
     return person; 
    } 
} 

私はこれらのエンティティを持っている:

@Entity 
@Table(schema = "ref") 
public class Doc { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @JsonIgnore 
    private long id; 

    private Integer iddoc; 
    private String docname; 

    ... 
} 

@Entity 
public class Person { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @JsonIgnore 
    private long id; 

    private String name; 

    @ManyToOne 
    @JoinColumn(name = "doctype", referencedColumnName = "iddoc", nullable = false) 
    private Doc doc; 

    ... 
} 

そして中docこの場合はpersonは常にnullであり、かなり理解できる。しかし、私が必要とする行動をどのように実装するのですか?

答えて

0

このリンクを見かけましたか?オーダーテーブルと顧客テーブルとの関係で特に見て

http://www.javaworld.com/article/2077819/java-se/understanding-jpa-part-2-relationships-the-jpa-way.html

私はあなたが複数のドキュメントを持っている人を必要と理解しています。 だから、

@OneToMany(mappedBy="person", fetch=FetchType.EAGER) 
    private List<Doc> docs; 

に定義

private Doc doc; 

を変更しようとドククラスでこれを追加してみてください:、

@ManyToOne(optional=false) 
@JoinColumn(name="doctype",referencedColumnName="iddoc") 
    private Person person; 

これはあなたが必要な動作を実装するための正しい方法でなければなりません100%確実ではありません。

https://en.wikibooks.org/wiki/Java_Persistence/OneToMany

0
 @RestController 
     public class PersonController { 

      @Autowired 
      PersonRepository personRepository; 

      @Autowired 
      DocRepository docRepository; 

      @Transactional 
      @RequestMapping("/add") 
      @ResponseBody 
      public void add(@RequestBody Person person) { 
       Doc doc=docRepository.findByIddoc(person.getDoc().getIddoc()); 
       if(!(doc==null)){ 
       Person personAdd=new Person(); 
       personAdd.setName("name"); 
       personAdd.setDoc(doc); 
       personRepository.saveAndFlush(person); 
       } 
      } 
     } 



    @Entity 
    public class Person { 

     @Id 
     @GeneratedValue(strategy = GenerationType.IDENTITY) 
     @JsonIgnore 
     private long id; 

     private String name; 

     @ManyToOne(cascade=CascadeType.ALL) 
     @JoinColumn(name = "doctype", referencedColumnName = "iddoc", nullable = false) 
     private Doc doc; 






@Entity 
@Table(schema = "demo") 
public class Doc { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @JsonIgnore 
    private long id; 

    private Integer iddoc; 
    private String docname; 
:ここ は、必要なソリューションを実現する方法をexplaines別のリンクです
関連する問題