【发布时间】:2017-09-14 09:20:24
【问题描述】:
这是我用于 oneToOne 映射的 SpringBoot Jpa 实现。当我保存时,Hibernate 尝试在company_details 表中为company_id 外键插入null,如下面的CompanyService.createCompany() 代码所示。
感谢任何帮助。
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);
}
}
【问题讨论】:
标签: hibernate jpa spring-boot spring-data