java—在org.hibernate.mapping.table及其相关的超级表和辅助表中找不到具有逻辑名称的列

tv6aics1  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(311)

当我尝试运行我的应用程序类时,它会给我以下错误:
2021-04-26 16:20:47.551错误14416---[main]j.localcontainerentitymanagerfactorybean:未能初始化jpa entitymanagerfactory:在org.hibernate.mapping.table(property)及其相关的超表和辅助表中找不到逻辑名称为property\u id的列
从这一点来看,我觉得我可能命名不正确,但即使我进入表并直接复制字段名,也没有解决问题。
财产实体如下:

@Entity
@Table(name = "property")
public class Property {

  @Id
  @OneToOne
  @JoinColumn(name = "property_id", referencedColumnName = "property_id")
  private Address address;
  // other fields

其表结构为:

而它所连接的地址实体是:

@Entity
@Table(name = "address")
public class Address {

  @Id
  @GeneratedValue
  @Column(name = "property_id")
  private Long propertyID;
  // other fields

表结构:

如您所见,我的名称是正确的,而且我相信我的数据源的格式是正确的,如果我使用的列名不在表中,intellij会抛出一个警告,说它无法解析该列,而我现在在编写它们时没有得到该警告。
这是我第一个使用jpa的大项目,所以我可能会错过一些明显的东西,但任何帮助都会非常感谢,我看了其他解决方案,并尝试了一些建议,但他们似乎都略有不同,不适用于我正在尝试的。任何帮助都将不胜感激:)

tktrz96b

tktrz96b1#

@Entity
    @Table(name = "property")
    public class Property {

        @Id
        private Long id;

        @OneToOne
        @MapsId
        @JoinColumn(name="property_id")
        private Address address;

        ...
    }

    @Entity
    @Table(name = "address")
    public class Address {

        @Id
        @GeneratedValue
        @Column(name = "property_id")
        private Long propertyID;

        ...
    }

有关派生标识符,请参阅hibernate orm文档。

相关问题