如何保存一对多实体

How to save One-To-Many entitiy

我无法保存以下实体。我想 select 在尝试保存服务器时进行实验。

@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> {

}

服务器实体;

@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 。

但是,当我扩展实验室实体时,我的表被合并了。我想要 2 个单独的表。

在您的控制器中,您使用的是 LabRepository 而不是 ServerRepository。应该是:

@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);
    }
}