【发布时间】:2021-05-26 12:25:40
【问题描述】:
我希望使用共享主键与 2 个子实体进行一对一的单向映射。以下是模型类
public class Template implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "templatekey")
Integer templateKey;
@Column(name = "templateid", unique = true)
String templateId;
@OneToOne(cascade = CascadeType.ALL, optional = false)
@PrimaryKeyJoinColumn(name = "templatekey", referencedColumnName = "templatekey")
InstantOfferNoEsp instantOfferNoEsp;
@OneToOne(cascade = CascadeType.ALL, optional = false)
@PrimaryKeyJoinColumn(name = "templatekey", referencedColumnName = "templatekey")
Mobile mobile;
//constructor , setter and getters
}
Child 1 :
public class Mobile implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "templatekey")
Integer templateKey;
String mobileNewUrl;
//constructor , setter and getters
}
Child 2:
public class InstantOfferNoEsp {
@Id
@Column(name = "templatekey")
Integer templateKey;
String offerCodeType;
String headerUrl;
//constructor , setter and getters
}
我希望 templateKey 在所有表中都作为 PK。我正在调用templateRepository.save(template); 来一次保存所有实体,但它不起作用并出现ids for this class must be manually assigned before calling save() 错误。
任何建议都会有很大帮助。谢谢。
【问题讨论】:
-
您能否具体说明您要为
templateKey-IDENTITY或SEQUENCE使用什么实际生成策略? -
我想在父(模板)中使用
strategy = GenerationType.AUTO...并且应该在孩子之间共享 -
查看documentation。很难猜测它将如何解释。这将取决于休眠版本/休眠配置(您是否使用 hibernate.id.new_generator_mappings),数据库您使用什么
-
我正在使用 mysql 数据库,它使用 hibernate_sequence 来获取 Id
标签: spring-boot hibernate jpa spring-data-jpa jpa-2.1