【发布时间】:2016-08-19 06:08:05
【问题描述】:
我们尝试在一个查询中加入获取数据,但只有 LocationAddress 是加入获取的。对于 LocationGeodata jpa 总是产生第二个查询。 LocationAddress 中的@JoinFetch-Annotation 不受尊重。
给定以下模型和单向注释:
位置-----位置地址-----位置地理数据
每个位置都有一个地址,每个地址都引用一个全球地理数据表。我们还允许我们在任何表中都没有空值。
映射:
@Entity
public class Location {
@OneToOne(cascade=CascadeType.ALL)
@JoinFetch(JoinFetchType.INNER)
private LocationAddress locationAddress;
}
@Entity
public class LocationAddress {
@OneToOne
@JoinFetch(JoinFetchType.INNER)
private LocationGeodata locationGeoData;
}
通过 id 选择位置总是会产生两个查询:
@NamedQuery(
name="Location.getById",
query="SELECT l FROM Location l WHERE l.id = :id"
)
//produces same sql-result as above query
@NamedQuery(
name="Location.getById",
query="SELECT l, lg FROM Location l
JOIN FETCH l.locationAddress a
JOIN FETCH a.locatonGeodata lg
WHERE l.id = :id"
)
SELECT t1.ID, t1.DESCRIPTION, t1.LOCATIONADDRESS_ID, t2.STREET,
t2.HOUSENUMBER, t2.LOCATIONGEODATA_ID FROM LOCATION t1
INNER JOIN LOCATIONADDRESS t2
WHERE t1.LOCATIONADDRESS_ID = t2.ID AND t1.ID = ?
SELECT ID, ADMINCODE1, ADMINNAME1, COUNTRYCODE, LAT, LONG
FROM LOCATIONGEODATA WHERE (ID = ?)
我们如何将第二个查询合并到第一个查询中?谢谢你的建议!
相关表定义:
位置
locationAdress_ID
位置地址
loationGeoData_ID
【问题讨论】:
标签: jpa orm eclipselink jpa-2.1