hibernate:非实体类的实体属性

hk8txs48  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(428)

所以我有一个hibernate实体叫做appointment,在这个实体中我有一个appointnumber属性,它本身包含一个数字属性,它是一个字符串。当我坚持预约时,我需要预约号码。前几天我让它与@embedded和@embeddeble一起工作,但是这会创建一个我无法拥有的连接表。我尝试了许多其他的解决方案,试图让它在没有连接表的情况下工作,但我想不通(我有很多ava.lang.illegalstate例外)有人能帮忙吗?谢谢!

@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,用于约会,但不应为实体

public class AppointmentNumber {

    @OneToOne
    @JoinColumn(name = "appointmentNumber", unique = true, nullable = false)
    private String number;
slmsl1lt

slmsl1lt1#

你可以这样做:

@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转换器文档。

相关问题