2017-04-18 69 views
1

这是我的OneToOne映射的SpringBoot Jpa实现。 Hibernate试图在company_details表中为company_id外键插入空值,当我保存时,如下面的代码CompanyService.createCompany()所示。 感谢任何帮助。Hibernate尝试为OneToOne实体关系外键插入null

CREATE TABLE companies (
    id     BIGSERIAL PRIMARY KEY NOT NULL, 
    access_token  VARCHAR(255)    NOT NULL, 
    access_secret  VARCHAR(255)    NOT NULL, 
    token_expires_at TIMESTAMP WITH TIME ZONE NOT NULL 
); 

CREATE TABLE company_details (
    id     BIGSERIAL PRIMARY KEY NOT NULL, 
    company_id   BIGSERIAL    NOT NULL REFERENCES companies (id), 
    company_name   VARCHAR(50)    NOT NULL 
); 

@Entity 
@Table(name = "companies") 
public class Company { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(updatable = false) 
    private Long id; 

    @OneToOne(
     fetch = FetchType.EAGER, 
     mappedBy = "company", 
     cascade = CascadeType.ALL 
    ) 
    private CompanyDetails details; 
    ... 
} 

@Entity 
@Table(name = "company_details") 
public class CompanyDetails { 

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

    @OneToOne 
    @JoinColumn(name = "company_id") 
    @MapsId 
    @JsonBackReference // avoid cyclic references 
    private Company company; 

    @Size(max = 50) 
    @NotNull 
    private String companyName; 
} 

@Service 
public class CompanyService { 
    @Autowired 
    private CompanyRepository companyRepository; 

    @Transactional 
    public Company createCompany() { 
     CompanyDetails cd = new CompanyDetails(); 
     cd.setName("cd"); 

     Company c = new Company(); 
     c.setDetails(cd); 
     this.companyRepository.save(c); 
    } 
} 

回答

0

看起来你的实体没有共享主键。

因此除去@MapsId,让它像这样:

@OneToOne 
@JoinColumn(name = "company_id") 
@JsonBackReference // avoid cyclic references 
private Company company; 

还要设置公司companyDetails:

CompanyDetails cd = new CompanyDetails(); 
    cd.setName("cd"); 

    Company c = new Company(); 
    c.setDetails(cd); 

    cd.setCompany(c); 

    this.companyRepository.save(c); 
+0

感谢您的帮助。 – NaveenBabuE

+0

很高兴为你解决 –