Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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 在联接字段定义上使用@ManyToOne时,我得到一个未解析的属性异常_Java_Hibernate_Jpa_Associations_Many To One - Fatal编程技术网

Java 在联接字段定义上使用@ManyToOne时,我得到一个未解析的属性异常

Java 在联接字段定义上使用@ManyToOne时,我得到一个未解析的属性异常,java,hibernate,jpa,associations,many-to-one,Java,Hibernate,Jpa,Associations,Many To One,我拥有以下@Entity: @实体 @表(name=“设备”) 公共类设备扩展模型{ @身份证 @GeneratedValue(策略=GenerationType.AUTO) @列(name=“id”) 私人长id; @列(name=“name”) 私有字符串名称; @列(name=“资产标签”) 私有整数资产标签; @列(name=“token”) 私有字符串令牌; @列(name=“上次看到”) 上次见到的私人字符串; @独身癖( cascade=CascadeType.ALL, 删除=真,

我拥有以下@Entity:

@实体
@表(name=“设备”)
公共类设备扩展模型{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”)
私人长id;
@列(name=“name”)
私有字符串名称;
@列(name=“资产标签”)
私有整数资产标签;
@列(name=“token”)
私有字符串令牌;
@列(name=“上次看到”)
上次见到的私人字符串;
@独身癖(
cascade=CascadeType.ALL,
删除=真,
fetch=FetchType.LAZY,
mappedBy=“设备”
)
私人设置的轨道;
公共设备(){
超级();
}
公共设备(长id、字符串名称、整数资产标记、字符串令牌、最后一次看到的字符串){
超级();
this.id=id;
this.name=名称;
this.asset\u tag=asset\u tag;
this.token=token;
this.last_seen=last_seen;
}
公共字符串getName(){
返回名称;
}
公共设备集合名(字符串名){
this.name=名称;
归还这个;
}
公共整数getAsset_标记(){
返回资产标签;
}
公共设备设置资产标签(整数资产标签){
this.asset\u tag=asset\u tag;
归还这个;
}
公共字符串getToken(){
返回令牌;
}
公共设备设置令牌(字符串令牌){
this.token=token;
归还这个;
}
公共字符串getLast_seen(){
最后一次见到你;
}
公共设备设置上次查看(字符串上次查看){
this.last_seen=last_seen;
归还这个;
}
公共集getTrackings(){
返回轨迹;
}
公共设备设置轨道(设置轨道){
这个。轨迹=轨迹;
归还这个;
}
}
@实体
@表(name=“跟踪”)
公共类跟踪扩展模型{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”)
私人长id;
@列(name=“reported\u lat”)
报告的私人浮动利率;
@列(name=“报告的液化天然气”)
私人浮式液化天然气;
@列(name=“normalized_lat”)
私人浮动利率;
@列(名称=“标准化液化天然气”)
私人浮式液化天然气;
@多通(级联=级联类型.ALL)
@JoinColumn(name=“设备id”)
专用设备;
公众追踪(){
超级();
}
...
}
我的存储库接口定义如下:

public interface TrackingRepository扩展了JpaRepository{
@查询(“从跟踪t中选择t,其中t.device\u id=:设备id ORDER BY t.created DESC”)
列出getLastLocation(@Param(“设备id”)长设备id,可分页;
@查询(“从跟踪t中选择t,其中t.device\u id=:device\u id和t.created>=:时间限制顺序由t.created DESC确定”)
列出getLastLocation(@Param(“设备id”)长设备id、@Param(“时间限制”)整数时间限制,可分页;
}
当我构建项目时,当它构建存储库类时,我得到以下异常:

原因:org.hibernate.QueryException:无法解析属性:device\u id of:com.vw.shuttle.model.Tracking[从com.vw.shuttle.model.Tracking t中选择t,其中t.device\u id=:device\u id ORDER by t.created DESC]
位于org.hibernate.QueryException.generateQueryException(QueryException.java:120)
位于org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103)
位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.docomFile(QueryTranslatorImpl.java:217)
位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:141)
在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:115)
在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:77)
位于org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153)
位于org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:553)
位于org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:662)`

为什么我会得到那个例外?从我阅读的文档来看,它似乎应该通过
@manytone
@JoinColumn
注释来处理映射。

您的查询应该根据对象属性而不是列来定义,即
t.device.id
,而不是
t.device\u id

@Query("SELECT t FROM Tracking t WHERE t.device.id = :device_id AND t.created 
           >= :time_limit ORDER BY t.created DESC")
List<Tracking> getLastLocation(@Param("device_id") Long device_id, @Param("time_limit") Integer time_limit, 
                                 Pageable pageable);
@Query(“从跟踪t中选择t,其中t.device.id=:device\u id和t.created
>=:t.创建描述的时间限制顺序“
列出getLastLocation(@Param(“设备id”)长设备id、@Param(“时间限制”)整数时间限制、,
可寻呼(可寻呼);

Devices类的定义是什么?如果没有看到您的设备实体,就无法猜测。如果它有一个“id”字段,外键应该命名为“device_id”,那么为什么冗余的
@JoinColumn
注释?用设备entityWow更新,它修复了所有问题并立即编译。非常感谢。我不知道这些查询是作为对象属性编写的。现在这更有意义了,查询是JPQL而不是SQL。但是,如果需要,您可以使用@query注释上的
nativeQuery
=true标志使用本机SQL查询。谢谢,非常感谢!