Java Hibernate@JoinColumnOrFormula错误

Java Hibernate@JoinColumnOrFormula错误,java,hibernate,hibernate-mapping,hibernate-annotations,Java,Hibernate,Hibernate Mapping,Hibernate Annotations,我试图通过JoinTable映射一个实体,但这不起作用,所以我现在尝试使用@JoinColumnOrFormula注释,但我一直得到一个错误。模型是User、House、UserHouseMap。我想使用user.name非主键&非唯一键使用user\u house\u map从user\u house\u map检索记录。user\u name主键&使用另一个键house\u name检索关联的房屋,该键应引用house.house\u name主键 DB结构很奇怪,但它是必要的&此时无法更改

我试图通过JoinTable映射一个实体,但这不起作用,所以我现在尝试使用@JoinColumnOrFormula注释,但我一直得到一个错误。模型是User、House、UserHouseMap。我想使用user.name非主键&非唯一键使用user\u house\u map从user\u house\u map检索记录。user\u name主键&使用另一个键house\u name检索关联的房屋,该键应引用house.house\u name主键

DB结构很奇怪,但它是必要的&此时无法更改

这是我试过的。这可能是完全错误的,因为没有关于如何使用JoinColumnOrFormula的适当文档

@Id
@GeneratedValue
@Expose
public Long id;

@Expose
@Required
@ManyToOne
@JoinColumnsOrFormulas({
        @JoinColumnOrFormula(formula=@JoinFormula(value="(SELECT user_name as name from user_housing_map where user_name = name)", referencedColumnName="house_name")),
        @JoinColumnOrFormula(column = @JoinColumn(name="house_name", referencedColumnName="house_name"))
})
public House house;
注意:我最初尝试了以下映射

@ManyToOne
@JoinTable(
    name="user_house_map",
    joinColumns=
    @JoinColumn(name="user_name", referencedColumnName="name"),
    inverseJoinColumns=
    @JoinColumn(name="house_name", referencedColumnName="house_name"))
public House house;
但我犯了这个错误

Unable to find column with logical name: name in org.hibernate.mapping.Table(users)
以下是所有3个模型的DB模式

使用者

房屋

用户房屋地图


如果是针对用户类,则只应使用带有反向引用列的JoinTable注释:

@ManyToOne
@JoinTable(
    name="user_house_map",
    joinColumns=
    @JoinColumn(name="user_name", referencedColumnName="name"),
    inverseJoinColumns=
    @JoinColumn(name="house_name", referencedColumnName="house_name"))
public House house;

但JPA通常不支持未超过@ID列的联接。幸运的是,他们似乎正在使用hibernate。

Btw,这是我最初尝试的,但我遇到了以下错误,无法找到具有逻辑名称的列:org.hibernate.mapping.Tableusers中的名称。我将用这个注释更新这个问题
                Table "public.houses"
    Column     |          Type          | Modifiers 
---------------+------------------------+-----------
 house_name    | character varying(255) | not null
 address       | text                   | 
 city          | text                   | 
 state         | text                   | 
 zip           | integer                | 
 zip_ext       | integer                | 
 phone         | text                   | 
Indexes:
    "house_pkey" PRIMARY KEY, btree (house_name)
Referenced by:
    TABLE "user_house_map" CONSTRAINT "house_map_fkey" FOREIGN KEY (house_name) REFERENCES house(house_name) DEFERRABLE INITIALLY DEFERRED
         Table "public.user_house_map"
   Column    |          Type          | Modifiers 
-------------+------------------------+-----------
 user_name   | character varying(255) | not null
 house_name  | character varying(255) | not null
Indexes:
    "user_house_map_pkey" PRIMARY KEY, btree (user_name)
    "user_house_map_house_key" btree (house_name)
Foreign-key constraints:
    "user_house_map_house_fkey" FOREIGN KEY (house_name) REFERENCES houses(house_name) DEFERRABLE INITIALLY DEFERRED
Referenced by:
    TABLE "users" CONSTRAINT "housing_fkey" FOREIGN KEY (name) REFERENCES user_house_map(user_name) DEFERRABLE INITIALLY DEFERRED
@ManyToOne
@JoinTable(
    name="user_house_map",
    joinColumns=
    @JoinColumn(name="user_name", referencedColumnName="name"),
    inverseJoinColumns=
    @JoinColumn(name="house_name", referencedColumnName="house_name"))
public House house;