无法在JPA Springboot中找到具有逻辑名称的列。

12 浏览
0 Comments

无法在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 List room;
    @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问题中提到的方式做了相同的处理。我有什么遗漏吗?

0
0 Comments

在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"的问题了。

0