2017-10-30 6 views
0

次のエンティティを保存できません。私はサーバーを保存しようとすると、Labを選択したいと思います。1対多のエンティティを保存する方法

@Entity 
@Getter 
@Setter 
public class Lab { 

    @Id 
    @GeneratedValue 
    @Column(name = "ID") 
    private Long id; 

    @NotNull 
    @Column(name = "LAB_NAME") 
    private String labName; 

    @NotNull 
    @Column(name = "LAB_PRIME") 
    private String labPrime; 

    @NotNull 
    @Column(name = "LAB_SERVICE_IP", nullable = false) 
    private String serviceIp; 

    @Column(name = "LAB_OWNER", nullable = false) 
    @Enumerated(EnumType.STRING) 
    private LabOwner labOwner; 

    @Column(name = "LAB_RELEASE") 
    @Enumerated(EnumType.STRING) 
    private LabRelease labRelease; 

    @JsonIgnore 
    @OneToMany(fetch = FetchType.EAGER) 
    private Set<Server> servers; 


    public Lab() { 
    } 

    public Lab(String labName, String labPrime, String serviceIp, LabOwner labOwner, LabRelease labRelease, Set<Server> servers) { 
     this.labName = labName; 
     this.labPrime = labPrime; 
     this.serviceIp = serviceIp; 
     this.labOwner = labOwner; 
     this.labRelease = labRelease; 
     this.servers = servers; 
    } 
} 

リポジトリ:

public interface LabRepository extends JpaRepository<Lab, Long> { 

} 
public interface ServerRepository extends JpaRepository<Server, Long> { 

} 

サーバーEntitiy。

@Entity 
@Getter 
@Setter 
public class Server { 

    @Id 
    @GeneratedValue 
    @Column(name = "ID") 
    private Long id; 

    @NotNull 
    @Column(name = "LOGICAL_IP") 
    private String logicalIp; 

    @NotNull 
    @Column(name = "INSTANCE_TYPE") 
    private String instanceType; 

    @NotNull 
    @Column(name = "HOST_NAME", nullable = false) 
    private String hostName; 

    @NotNull 
    @Column(name = "HDWR_TYPE", nullable = false) 
    private String hardwareType; 

    @NotNull 
    @Column(name = "A2_TYPE", nullable = false) 
    private String a2Type; 

    @ManyToOne(fetch = FetchType.LAZY) 
    private Lab lab; 

    public Server() { 
    } 

    public Server(String logicalIp, String instanceType, String hostName, String hardwareType, String a2Type, Lab lab) { 
     this.logicalIp = logicalIp; 
     this.instanceType = instanceType; 
     this.hostName = hostName; 
     this.hardwareType = hardwareType; 
     this.a2Type = a2Type; 
     this.lab = lab; 
    } 
} 

コントローラー:

@RestController 
@RequestMapping(value = "services/") 
public class GenericController { 

    @Autowired 
    LabRepository labRepository; 

    @Autowired 
    LabRepository serverRepository; 

    @RequestMapping(value = "server", method = RequestMethod.POST) 
    public Server create(@RequestBody Server server) { 
     return serverRepository.saveAndFlush(server); 
    } 
} 

私はserverRepository.saveAndFlush(サーバ)を使用することはできません。それは、Sがその範囲内ではないと言います.Labを拡張する必要があります。

しかし、Labエンティティを拡張すると、テーブルがマージされました。私は2つの別々のテーブルにしたいと思います。

+0

変更 LabRepository serverRepository; ServerRepository serverRepository in GenericController –

答えて

0

コントローラでは、ServerRepositoryの代わりにLabRepositoryを使用しています。それはする必要があります:

@RestController 
@RequestMapping(value = "services/") 
public class GenericController { 

    @Autowired 
    LabRepository labRepository; 

    @Autowired 
    ServerRepository serverRepository; 

    @RequestMapping(value = "server", method = RequestMethod.POST) 
    public Server create(@RequestBody Server server) { 
     return serverRepository.saveAndFlush(server); 
    } 
} 
+0

私は盲目だと思う:)。ありがとうございました! –

+0

haha​​。それは私たちの最善を尽くす。 – Mustafa

関連する問題