次のエンティティを保存できません。私はサーバーを保存しようとすると、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つの別々のテーブルにしたいと思います。
変更 LabRepository serverRepository; ServerRepository serverRepository in GenericController –