Hibernate的问题

lz524 2011-08-19 04:03:50
我在自学Hibernate,有些问题不懂想请教大家哈。
“所有的持久化类都要求有无参的构造器,因为Hibernate必须使用java的反射机制来为你创建对象”
这句话是什么意思啊。主要是不明白j“ava的反射机制”这么个名词
...全文
66 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lz524 2011-08-19
  • 打赏
  • 举报
回复
终于懂了“java的反射机制”
Class对象可以获取类(class)中的方法以及属性,也可以用它来创建此类的对象
不知道这样理解对不对
lz524 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 trocp 的回复:]
来个更形象的

Java code
public static void main(String[] args) {
try {

Class c = Class.forName("java.lang.String");//因为Hibernate只知道类的包路径和类名,比如java.lang.String
……
[/Quote]

厉害
oO临时工Oo 2011-08-19
  • 打赏
  • 举报
回复
来个更形象的
	public static void main(String[] args) {
try {

Class c = Class.forName("java.lang.String");//因为Hibernate只知道类的包路径和类名,比如java.lang.String
Constructor[] cs = c.getConstructors();//得到类java.lang.String的无参构造器,因为也许你有很多有参的,但是Hibernate不知道。
Object obj = cs[0].newInstance(null);//用无参构造器(也就是构造函数)构造一下java.lang.String的实例
System.out.println(obj.getClass().getName());//查看一下构造出来的实例是什么类(类名)

} catch (Exception e) {
e.printStackTrace();
}

}


其实也许Hibernate也可以定义规则,叫你在配置文件告诉它你的有参构造器的结构,但是至少目前没有用这样的规则。

所以就其原因,这还是一个规则问题。你照着用就是了。
小笨熊 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 trocp 的回复:]

一、所有的持久化类都要求有无参的构造器

持久化类:直接通过JDBC操作数据库的类,将数据增删改到数据库也是一种持久化;

比如一个持久化类:

public class XxxDAO{

public XxxDAO(){}
}

这个XxxDAO类必须要有一个无参数构造函数public XxxDAO(){}。

二、因为Hibernate必须使用java的反射机制……
[/Quote]

lz好好看看
oO临时工Oo 2011-08-19
  • 打赏
  • 举报
回复
一、所有的持久化类都要求有无参的构造器

持久化类:直接通过JDBC操作数据库的类,将数据增删改到数据库也是一种持久化;

比如一个持久化类:

public class XxxDAO{

public XxxDAO(){}
}

这个XxxDAO类必须要有一个无参数构造函数public XxxDAO(){}。

二、因为Hibernate必须使用java的反射机制来为你创建对象

因为Hibernate只能给你定外规则,叫你必须有这么一个无参构造,因为你其它的有参构造Hibernate根据不可能预知,而Hb可以通过以下的方式来建立这个XxxDAO类的实例。

try {

Class c = String.class;
Constructor[] cs = c.getConstructors();
Object obj = cs[0].newInstance(null);
System.out.println(obj.getClass().getName());

} catch (Exception e) {
e.printStackTrace();
}


以上代码运行后会输出String,这就是原理
lz524 2011-08-19
  • 打赏
  • 举报
回复
刚百度的,百度百科里面把我说的云里雾里的,好抽象
sxb372435741 2011-08-19
  • 打赏
  • 举报
回复
反射是java的基础,还是多看看基础的东西吧!
Fly_m 2011-08-19
  • 打赏
  • 举报
回复
所有的持久化类都要求有无参的构造器,因为Hibernate必须使用java的反射机制来为你创建对象

你要创建对象,要通过构造函数吧。hibernate不可能知道你要创建对象时需要传递哪些参数,所以就要求你必须提供一个无参的构造函数,这样就可以通过调用class.newInstance来创建对象了,然后再设置各个字段。
不然,它怎么创建对象呢?
soli11722984 2011-08-19
  • 打赏
  • 举报
回复
就是反射。。。。。
JAVA基础知识

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧