首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hibernate实体虚拟列错误?

Hibernate实体虚拟列错误?
EN

Stack Overflow用户
提问于 2015-08-05 09:58:11
回答 1查看 1.8K关注 0票数 0

我在我的Entity中定义了一个虚拟列Entity,用于一些距离计算,并与distanceInKm一起给出用户的响应,这是一个虚拟列,而不是我的表中的一个列,它运行良好-- (case 1)

现在使用相同的实体从表中获取所有值,但获取com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'restaurant0_.distanceInKm' in 'field list'.(案例2)

我了解了用于calculation.but的虚拟列的calculation.but注释的用法,如果使用的是虚拟列不会序列化/添加到中的用户响应(例1),则.i需要使用一个实体实现API ie、Case 1和Case 2

代码语言:javascript
运行
复制
 @Entity
    @Table(name = "restaurants")
    public class Restaurants implements Serializable {

        private static final long serialVersionUID = 1L;

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "restaurant_id")
        private int restaurantId;

        @Column(name = "restaurant_name")
        private String restaurantName;

        @Column(name = "category_id")
        private Integer categoryId;

        @Column(name = "image_url")
        private String imageUrl;

        private Float longitude;

        private Float latitude;

        @Column(name = "contact_name")
        private String contactName;

        @Column(name = "primary_phone")
        private String primaryPhone;

        @Column(name = "secondary_phone")
        private String secondaryPhone;

        private String fax;

        private String address1;

        private String address2;

        /*  Virtual column   */
        @Column(insertable = false, updatable = false)
        private String distanceInKm;

}

我们很感激你的帮助。

我对距离比较的疑问,

代码语言:javascript
运行
复制
SELECT restaurant_id,restaurant_name,
category_id,image_url,longitude,latitude,
contact_name,primary_phone,secondary_phone,
fax,address1,address2,
((ACOS(SIN(:lat * PI() / 180) * SIN(latitude * PI() / 180) + COS(:lat * PI() / 180) * COS(latitude * PI() / 180) * COS((:lon-longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) 
AS `distanceInKm` FROM 
`restaurants` HAVING 
`distanceInKm`<=1 
ORDER BY `distanceInKm` ASC

我的方法

代码语言:javascript
运行
复制
public List<Restaurants> getRestaurantsByDistance(FilterRestaurantRequest filterRestaurantRequest) throws SQLException, ClassNotFoundException, IOException {
        Session session = sessionFactory.getCurrentSession();
        Float latitude = Float.parseFloat(filterRestaurantRequest.getLatitude());
        Float longitude = Float.parseFloat(filterRestaurantRequest.getLongitude());
        String sql = "SELECT restaurant_id,restaurant_name,category_id,image_url,longitude,latitude,contact_name,primary_phone,secondary_phone,fax,address1,address2,((ACOS(SIN(:lat * PI() / 180) * SIN(latitude * PI() / 180) + COS(:lat * PI() / 180) * COS(latitude * PI() / 180) * COS((:lon-longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distanceInKm` FROM `restaurants` HAVING `distanceInKm`<=1 ORDER BY `distanceInKm` ASC";
        Query query = session.createSQLQuery(sql).addEntity(Restaurants.class);
        query.setParameter("lat", latitude);
        query.setParameter("lon", longitude);
        List<Restaurants> restaurantses = query.list();
        return restaurantses;
    }
EN

回答 1

Stack Overflow用户

发布于 2015-08-05 12:00:00

我认为如果要进行一些计算,可以将虚拟列表示为数据库中的SQL公式或列值。如果我理解你的话,@式注释就会做你想做的事。这里是教程single/#d0e6481,这是示例http://gokhan.ozar.net/hibernate-derived-properties-formula-annotation/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31829190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档