繁体   English   中英

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

[英]Hibernate: Entity property from non-entity class

所以我有一个名为 Appointment 的休眠实体,在这个实体中我有一个 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;

预约实体

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

查看 JPA 转换器文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM