永发信息网

关于ssh 中hibenate的一个问题

答案:2  悬赏:10  手机版
解决时间 2021-11-12 04:03
  • 提问者网友:書生途
  • 2021-11-11 14:13
关于ssh 中hibenate的一个问题
最佳答案
  • 五星知识达人网友:上分大魔王
  • 2021-11-11 14:50
根据你写的这段,A与B应该是多对一的关系的,既然用到了hibernate的hql语句,那就没必要按照以前用sql关联查询的方法去写hql语句,在你的hibernate配置文件中的A的配置下,把属性b_id配置成对B的id的多对一,然后按照正常的查询A的方法就可以得到b_id了,hibernate自己会把映射到的所有类型都查出来追问@ManyToOne(fetch = FetchType.LAZY
@JoinColumn(name = "b_id ")
public B getB() {
return B
}
我是这样设置的。。。
正常的查询不是像我上面那样查询么?追答你实体类中写的是对的,但是配置上需要做映射,我没用过注解的方式,按xml写法,你看看吧


//assigned 表示主键是自增的



hql语句这么写
String hql="from A a where a.id="+id;
你指定一个数据库里有的id,就会查出对应的实体A,读取b_id值的时候 a.b_id.id追问不好意思,上面那是String="from A a where a.b_id = 1 ",发问题的时候写错了。
报的错是
org.hibernate.QueryException: could not resolve property: b_id of: com.examples.entity.base.A [from com.examples.entity.base.A a where a.b_id = 1 ]追答出这个异常,一般是你实体类或者配置文件的属性跟数据库不一致,没法执行,你看下数据库里b_id字段是什么类型的,再看看你实体类中的类型,配置文件配置的类型是不是一致,hql语句里,如果是varchar2这些类型,要加单影号 where a.b_id='1' 像这样追问实体类和数据库没问题,之前存的b_id 的时候都是先根据b_id 在B中查询到对象然后存这个对象的,查询的时候居然也是要根据对象来查询。。。感觉绕了个弯。求解。。。追答话说,你都已经知道B的id,根据这个id查到对象,又赋值给A.b_id,那你还查什么啊?都得到了,还查.....
如果是,你只知道B.id,想通过这个id来查A表得到这个B对象,那就在B的实体类中,写一个根据id生成的构造方法,在方法里写一个根据A.b_id查询的方法 给A.b_id赋值的时候这么写
a.setB_id(new B(id));
根据这个去数据库查,b_id是这个的A和B就都得到了
全部回答
  • 1楼网友:空山清雨
  • 2021-11-11 15:18
A表中的b_id不是B表中的id吗?当你写from B b where b.id=? ;不就把B中的符合条件的数据查询出来了吗?
public Query createQuery(String hql) {
Query query = getSession().createQuery(hql);
query.setParameter("id", 1);
return query;
}追问不好意思,上面写错了。我是想查询表A追答from A a where a.b=?追问等于的是b那个对象么,我又要根据b_id 在B表中取出对象放在这个后面么?追答a.b=B表中的id啊追问更加id不行,我是根据id在表B表取了一个对象以后才放在from A a where a.b=?查询滴。。。感觉绕了一圈。。。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯