大家好,今天学习hibernate 用的是一对多是自身的映射的
插入,单个查询都没问题,可等查询列表的时候出问题表查出来的数据其它字段都有值只有id全是0不知道为什么?
这个是model类
public class Menu { private long id;
private String name;
private String url;
private Menu menu;
private Set<Menu>child = new HashSet<Menu>();
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Menu getMenu() {
return menu;
}
public void setMenu(Menu menu) {
this.menu = menu;
}
public Set<Menu> getChild() {
return child;
}
public void setChild(Set<Menu> child) {
this.child = child;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} 这个 是hbm.xml文件
<hibernate-mapping> <class name="com.test.hailang.model.Menu" table="j_menu">
<id column="id" type="long">
<generator class="increment"></generator>
</id>
<property name="name" type="string"></property>
<property name="url" type="string"></property>
<set name="child" cascade="all" inverse="true">
<key column="pid"></key>
<one-to-many class="com.test.hailang.model.Menu"/>
</set>
<many-to-one name="menu" column="pid" class="com.test.hailang.model.Menu">
</many-to-one>
</class></hibernate-mapping>
向表中插入数据
Menu menu = new Menu();
menu.setName("first");
menu.setUrl("163.com");
Menu m1 = new Menu();
m1.setName("second");
m1.setUrl("126.com");
menu.getChild().add(m1);
m1.setMenu(menu);
Menu menu2 = new Menu();
menu2.setName("third");
menu2.setUrl("sina");
menu.getChild().add(menu2);
menu2.setMenu(menu);数据库中的数据
id name url pid
1 first 163.com null
2 second 126.com 1
3 third sina 1这个是查询方法的代码Transaction trance = session.beginTransaction();
List<Menu> list = null;
Query query=session.createQuery("from Menu");
List l1 = query.list();
list =(List<Menu>) query.list();当我循环list的时候取别的字段都没问题只有当menu.getId()的时候全是0不知道为什么,有知道的朋友请指点下谢谢了!!!
插入,单个查询都没问题,可等查询列表的时候出问题表查出来的数据其它字段都有值只有id全是0不知道为什么?
这个是model类
public class Menu { private long id;
private String name;
private String url;
private Menu menu;
private Set<Menu>child = new HashSet<Menu>();
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Menu getMenu() {
return menu;
}
public void setMenu(Menu menu) {
this.menu = menu;
}
public Set<Menu> getChild() {
return child;
}
public void setChild(Set<Menu> child) {
this.child = child;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} 这个 是hbm.xml文件
<hibernate-mapping> <class name="com.test.hailang.model.Menu" table="j_menu">
<id column="id" type="long">
<generator class="increment"></generator>
</id>
<property name="name" type="string"></property>
<property name="url" type="string"></property>
<set name="child" cascade="all" inverse="true">
<key column="pid"></key>
<one-to-many class="com.test.hailang.model.Menu"/>
</set>
<many-to-one name="menu" column="pid" class="com.test.hailang.model.Menu">
</many-to-one>
</class></hibernate-mapping>
向表中插入数据
Menu menu = new Menu();
menu.setName("first");
menu.setUrl("163.com");
Menu m1 = new Menu();
m1.setName("second");
m1.setUrl("126.com");
menu.getChild().add(m1);
m1.setMenu(menu);
Menu menu2 = new Menu();
menu2.setName("third");
menu2.setUrl("sina");
menu.getChild().add(menu2);
menu2.setMenu(menu);数据库中的数据
id name url pid
1 first 163.com null
2 second 126.com 1
3 third sina 1这个是查询方法的代码Transaction trance = session.beginTransaction();
List<Menu> list = null;
Query query=session.createQuery("from Menu");
List l1 = query.list();
list =(List<Menu>) query.list();当我循环list的时候取别的字段都没问题只有当menu.getId()的时候全是0不知道为什么,有知道的朋友请指点下谢谢了!!!
hbm.xml
<id column="id" type="long">
<generator class="increment"></generator>
</id>
这里是设置你主键是什么类型的,是自增的还是什么类型!你先看看你数据库表主键是什么类型的,然后这里设置成什么类型的就行
如果是orcal类型的话
改成sequence 只适用于Oracle
<id name="id" column="id">
<generator class="sequence">
<param name="sequence">person_seq</param><!--指定sequence名-->
</generator>
</id>
hibernate generator class""详解 (转)
<generator class="sequence">
<param name="sequence">person_seq</param><!--指定sequence名-->
</generator>
</id> 了 插入数据没问题
查询数据还是一样查询出来的list中的menu.getid()还是0其它值没问题
问题依旧啊 呜呜呜。急啊弄了一天了 也百不到东西
这个是hibernate生成的sql语句 我放到数据库查询里面有id啊,不明白为什么会这样
0 first
0 third
0 second这我只输出了menu.getId() 和menu.getName()
<generator class="sequence">
<param name="sequence">person_seq</param><!--指定sequence名-->
</generator>
</id>
这样还是不行么?
怎么才能匹配上那?
identity
试试这两个
我要是单独查询id也是正常的就是查询出所有的以列表形式返回时列表中的每个对象的id就都变成0了不知道为什么。
<generator class="">
<param name=""></param><!--指定sequence名-->
</generator>
<generator class="sequence" >
<param name="sequence">HAILANG.MENU_ID</param>
</generator>
</id>
我用的是oracle数据库列没有自增长的自属性,只能靠sequence 我在数据库建了HAILANG.MENU_ID这个用来自增长是没问题的我试了
identity
你先用用这两个,看行不行
<column name="id" precision="6" scale="0"/>
<generator class="sequence"> <!--在ORCAL中生在器的类型用SEQUENCE--> <!--配置生在器的参数,在hibernate中默认的ORCAL的序列名字为hibernate_sequence,所以在此处要修改为你在ORCAL中创建的序列名seq_userinfo_id-->
<param name="sequence">seq_userinfo_id</param>
</generator>
</id>
我觉得是这里的问题,你再试试看吧,你在查询列表的时候是怎么读的,代码帖出来我也看看吧,清下项目缓存!
这个是hibernate生成的sql语句
怎么清项目缓存啊?