2017-04-18 8 views
1

ここはoneToOneマッピング用のSpringBoot Jpa実装です。 Hibernateは、のコードに示すように、テーブルに外部キーcompany_idのヌルを挿入しようとしました。 助けてください。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を削除して、このようにそれを残す:

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

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

    cd.setCompany(c); 

    this.companyRepository.save(c); 
+0

助けをありがとう:

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

またcompanyDetailsで会社に設定してください。 – NaveenBabuE

+0

それはあなたのために働いてうれしい –

関連する問題