如何解决如何在JPA中使用ZeroOrOneToOne反向引用映射OneToOne?
我有一个旧版应用程序,它具有如下所示的实体关系。我将字段名称更改为不太现实的值,并仅将其更改为相关字段。
CREATE TABLE `billing_target` (
`billingTargetID` int(11) NOT NULL,`targetType` char(5) NOT NULL,`targetID` int(11) NOT NULL
PRIMARY KEY (`billingTargetID`)
);
CREATE TABLE `Client` (
`clientID` int(11) NOT NULL,`name` varchar(200),`color` varchar(200),`shape` varchar(200)
PRIMARY KEY (`clientID`),CONSTRAINT `fk_client_billingTarget`
FOREIGN KEY (`clientID`)
REFERENCES `billing_target` (`targetID`)
);
我最近的尝试在保存时会导致问题,因为它给出了一个空的实体键异常。
@Data
@Entity
public class BillingTarget implements Serializable {
@Id
@Column(name = "billingTargetID")
private Integer id;
@Column(name = "targetID",nullable = false)
private Integer targetID;
@Column(name = "targetType",nullable = false)
private String type;
}
@Data
@Entity
public class Client implements Serializable {
@Id
@Column(name = "clientID")
private Integer id;
@OneToOne
@JoinColumn(name = "clientID")
@MapsId("targetID")
private BillingTarget billingTarget;
private String name;
private String color;
private String shape;
}
如果有兴趣,这里是PlantUML代码
@startuml
hide circle
entity BillingTarget {
* billingTargetID <<generated>>
--
* targetType
* targetID <<unique>>
}
entity Client {
* clientID <<fk>>
--
* name
color
shape
}
BillingTarget ||--o| Client : "targetID:clientID"
@enduml
我已经在考虑使用MappedSuperclass
,但是现在它只是一种类型(尽管可能更多)。其次,计费目标可能是zero
而不是null
,因为已经存在一个NOT NULL约束。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。