无法在JPA Springboot中找到具有逻辑名称的列。
无法在JPA Springboot中找到具有逻辑名称的列。
有两个表格。酒店内部的地址。我已经提到了一对多的关系。但是编译器报错了。
在类路径资源[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]中定义的名为 'entityManagerFactory' 的 bean 的创建失败: 初始化方法调用失败; 嵌套异常是org.hibernate.MappingException: 无法在 org.hibernate.mapping.Table(address) 及其相关的超级表和辅助表中找到逻辑名称为 addressId 的列
Hotel.java
@AllArgsConstructor @Data @Entity @Table(name = "hotels") @NoArgsConstructor public class HotelEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "hote_id") private String hotelId; @Column(name = "hotel_name") private String hotelName; @Column(name = "build_date") private Date buildDate; @Column(name = "guest_type") @Enumerated(EnumType.STRING) private GuestType guestType; @Column(name = "room") @OneToMany(targetEntity = RoomEntity.class,cascade = CascadeType.ALL) @JoinColumn(name = "hotel_room", referencedColumnName = "roomId") private Listroom; @OneToOne(targetEntity = AddressEntity.class,cascade = CascadeType.ALL) @JoinColumn(name = "hotel_address", referencedColumnName = "addressId") private Address hotelAddress;
Address.java
@Entity @Table(name = "ADDRESS") @Getter @Setter @ToString @RequiredArgsConstructor public class AddressEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "address_id") private String addressId; @Column(name = "street_name") private String streetName; @Column(name = "city") private String city; @Column(name = "zip_code") private String zipCode; @Column(name = "country") private String country; }
我尝试了一些更改变量名称的操作,还仔细检查了是否有遗漏的地方。但是看起来我按照其他Stack Overflow问题中提到的方式做了相同的处理。我有什么遗漏吗?
在JPA Spring Boot中,遇到了"Unable to find column with logical name"的问题。这个问题的原因是因为在JPA注解中,referencedColumnName
应该指向数据库中的列名,而不是Java属性名。
解决这个问题的方法是将referencedColumnName
的值从addressId
改为address_id
。
具体的代码如下:
(name = "hotel_address", referencedColumnName = "address_id") private Address hotelAddress;
通过修改referencedColumnName
的值,将其与数据库中的列名对应起来,就可以解决"Unable to find column with logical name"的问题了。