Hibernate:来自非实体类的实体属性



所以我有一个名为Appointment的hibernate实体,在这个实体中,我有AppointNumber属性,它本身包含一个字符串数字属性。当我坚持我的约会时,我需要约会号码。前几天我使用了@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;

预约实体

约会编号,用于约会,但不应为实体

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;
}
}

看看JPAConverter文档。

最新更新