如何使用jpa将一个简单的类(非实体)与dto(Entity)类映射

时间:2018-08-22 14:14:50

标签: hibernate spring-boot jpa spring-data-jpa jpa-2.1

我尝试使用非@Entity类进行@OneToOne映射,但似乎我做错了,请帮忙。这是以下类的错误日志。

  

由以下原因引起:org.hibernate.AnnotationException:com.package.model.Hotel.address上的@OneToOne或@ManyToOne引用了未知实体:com.package.model.Address

这是我的 Address.java

private String street;
private String city;
private String state;
private int pincode;
private String country;
private String locationCoordinates;
//Getters and setters removed from the code

这是我的 Hotel.java

@Id
@GeneratedValue
private int id;
private String password;
private String name;
private String contactPerson;
private String email;
private String countryCode;
private long phone1;
private long phone2;

@OneToOne(cascade=CascadeType.ALL)
private Address address;
private String description;

地址类不是@Entity类只有酒店类具有@Entity。现在,我尝试使用spring和JPA将值为 Address.java 的数据插入/创建(表)数据到单个旅馆表中,而我在Eclipse控制台中遇到了麻烦。

这是我试图从中获取数据的RestController

@Autowired
private RoomRepository roomRepository;
//RoomRepository is Interface which is extending JpaRepository

@GetMapping("hotels")
public List<Room> retriveAllHotels(){
    return roomRepository.findAll();
}

1 个答案:

答案 0 :(得分:1)

只需:

  1. 将地址类标记为@Embeddable
  2. 将指向酒店类地址的链接标记为@Embedded
  3. 删除@OneToOne

,“地址”字段将成为酒店实体的一部分