java - Hibernate:来自非实体类的实体属性
问题描述
所以我有一个名为 Appointment 的休眠实体,在这个实体中我有一个 ApppointNumber 属性,它本身包含一个数字属性,它是一个字符串。当我坚持我的约会时,我需要 AppointmentNumber。前几天我让它与@Embedded 和@Embeddable 一起工作,但这会创建一个我无法拥有的连接表。我尝试了许多其他解决方案来尝试让它在没有连接表的情况下工作,但我无法弄清楚。(我得到很多 ava.lang.IllegalStateException) 有人可以帮忙吗?谢谢!
@Entity(name = "appointments")
public class Appointment {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@OneToOne(mappedBy = "number")
@Fetch(value = FetchMode.SELECT)
private AppointmentNumber appointmentNumber;
AppointmentNumber,在 Appointment 中使用但不应该是实体
public class AppointmentNumber {
@OneToOne
@JoinColumn(name = "appointmentNumber", unique = true, nullable = false)
private String number;
解决方案
你可以这样做:
@Entity(name = "appointments")
public class Appointment {
///....
@Convert(converter = AppointmentNumberConverter.class)
private AppointmentNumber appointmentNumber;
///....
}
@Converter
public class AppointmentNumberConverter implements
AttributeConverter<PersonName, String> {
@Override
public String convertToDatabaseColumn(AppointmentNumber appointmentNumber) {
if (appointmentNumber == null) {
return null;
}
return appointmentNumber.getNumber();
}
@Override
public AppointmentNumber convertToEntityAttribute(String appointmentNumber) {
if (appointmentNumber == null) {
return null;
}
AppointmentNumber result = new AppointmentNumber();
result.setNumber(appointmentNumber);
return result;
}
}
查看 JPA 转换器文档。
推荐阅读
- angular - “HubConnection”类的构造函数是私有的,只能在类声明中访问
- javascript - `Vue 未定义`错误
- android - 安装英特尔 haxm android
- javascript - 如何在地图函数内进行异步调用后更新状态?
- python - 如何从现有模型中获取一个张量并在另一个模型中使用它?
- java - Bytearray 从 Java 中的 Mat 转换为 Python 中的 Socket 中的 Image
- c# - 在 C# 中将 hh:mm:ss:fff 转换为 ss.fff
- algorithm - 以更算法的方式进行最大值符号变量替换
- java - Octave的“javaMethod”的困难
- microsoft-cognitive - 为什么在尝试创建 QnA Maker 服务时禁用所有定价层?