今天在使用hibernate查询数据库的时候,报了这个异常。出错的语句是在
detachedCriteria.add(Restrictions.eq("artical_uid",user.getUid());
这是因为我数据库artical这张表关联了user这张表,然后想根据用户查询文章,使用上面的查询语句就报错了。
org.hibernate.QueryException: could not resolve property:artical_uid
异常的字面意思就是:查询异常,artical_uid
这个属性有争议(不合法)
这是因为hibernate建立了映射关系,Java实体类与数据库中的表一一对应
artical实体类
@Setter@Getter
public class Artical {
private Integer artical_id;
private String artical_title;
private User user;
private String artical_time;
private String artical_desc;
private String artical_context;
private Catagory catagory;
配置文件中的多对一映射关系配置
<many-to-one name="user" class="Blog.Model.User" column="artical_uid"/>
可以看出实体类属性user对应的是数据库中字段artical_uid
而在detachedCriteria.add(Restrictions.eq("artical_uid",user.getUid());
第一个参数必须要写成实体类中的属性名,否则就会报上面的那个异常。
===================================================================
开始以为改成detachedCriteria.add(Restrictions.eq("user",user.getUid());
这样的话就算完成了,但是又有新的异常,
org.hibernate.PropertyAccessException: IllegalArgumentException occurred ...
主要原因就是上面那条语句的第二个参数不能写成user.getUid()
直接写成user
即可
大功完成!!