Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ForeignKey将manytone休眠到非PrimaryKey目标列_Java_Hibernate_Jpa_Orm_Hibernate Mapping - Fatal编程技术网

Java 使用ForeignKey将manytone休眠到非PrimaryKey目标列

Java 使用ForeignKey将manytone休眠到非PrimaryKey目标列,java,hibernate,jpa,orm,hibernate-mapping,Java,Hibernate,Jpa,Orm,Hibernate Mapping,User.java private int userId; @Column(name="status") private String userStatus; @ManyToOne @JoinFormula(value="SELECT l.lookup_key FROM tb_lookup l WHERE l.category ='XXX'", referencedColumnName="status") private Lookup statusLookup; Lookup.java pr

User.java

private int userId;
@Column(name="status")
private String userStatus;

@ManyToOne
@JoinFormula(value="SELECT l.lookup_key FROM tb_lookup l WHERE l.category ='XXX'", referencedColumnName="status")
private Lookup statusLookup;
Lookup.java

private int lookupId;
@Column(name="category")
private String lookupCategory;
@Column(name="lookup_key")
private String lookupCode;
private String lookupDescription;

@OneToMany(mappedBy="lookupEntity", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private List<LookupDetail> lookupDetail;
所以基本上我需要为user.java创建多对一映射注释,这样它就可以提供sql查询

select * from User u
inner join Lookup l in u.userStatus = l.lookupCode and l.lookupCategory = 'XXX'
请注意,查找代码不是主键,主键是查找id 这是一个遗留数据库,所以我对此无能为力

感谢

用户实体可以与非主键列建立@manytone关联:

@ManyToOne
@JoinColumn(name="userStatus", referencedColumnName="lookupCode")
public Lookup getLookup() { return lookup; }
现在,您的查询如下所示:

select u
from User u
inner join u.lookup l
where lookupCategory = :lookupCategory 
如果要包含该联接的两个条件,则必须使用@JoinFormula:


这使用了一个辅助选择,但由于您使用的是旧模式,因此您没有太多其他选项。

谢谢,它可以工作,但缺少了一个额外的子句和l.lookupCategory='XXX'抱歉,但是它可以工作,因为userStatus是用户实体而不是查找实体抱歉,但是它不能工作,因为userStatus是用户实体而不是查找实体确实,我更改了公式查询。现在试试。对不起,它仍然不起作用。错误:在org.hibernate.mapping.Tabletb_lookup及其相关的超级表和辅助表中找不到逻辑名称为userStatus的列,该列仍引用查找表而不是用户表
select u
from User u
inner join u.lookup l
where lookupCategory = :lookupCategory 
@ManyToOne
@JoinFormula(value="SELECT l.lookupCode FROM Lookup l WHERE l.lookupCategory ='XXX'", referencedColumnName="userStatus")
public Lookup getLookup() { return lookup; }