您的位置:程序门 -> java -> web 开发



hibernate 可编程配问题?100分


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


hibernate 可编程配问题?100分[已结贴,结贴人:cppvip]
发表于:2007-09-07 17:39:26 楼主

                        configuration   cfg   =   new   configuration()
                        .addfile( "cccifngtvinfo.hbm.xml ");
                        sessionfactory   sessions   =   cfg.buildsessionfactory();//到这里抛出异常
                        session   sess   =   sessions.opensession(conn);//程序已有的连接

输出信息:
2007-9-7   17:06:00   org.hibernate.cfg.environment
info:   hibernate   3.2.5
2007-9-7   17:06:03   org.hibernate.cfg.environment
info:   hibernate.properties   not   found
2007-9-7   17:06:03   org.hibernate.cfg.environment
info:   bytecode   provider   name   :   cglib
2007-9-7   17:06:04   org.hibernate.cfg.environment
info:   using   jdk   1.4   java.sql.timestamp   handling
2007-9-7   17:06:05   org.hibernate.cfg.configuration
info:   reading   mappings   from   file:   cccifngtvinfo.hbm.xml
2007-9-7   17:06:09   org.hibernate.cfg.hbmbinder
info:   mapping   class:   core.cc.cif.entity.cccifngtvinfo   ->   cc_cif_ngtv_info
2007-9-7   17:06:11   org.hibernate.mapping.rootclass
warning:   composite-id   class   does   not   override   equals():   core.cc.cif.entity.cccifngtvinfo
2007-9-7   17:06:11   org.hibernate.mapping.rootclass
warning:   composite-id   class   does   not   override   hashcode():   core.cc.cif.entity.cccifngtvinfo
2007-9-7   17:06:11   org.hibernate.connection.usersuppliedconnectionprovider
warning:   no   connection   properties   specified   -   the   user   must   supply   jdbc   connections
exception   in   thread   "main "   org.hibernate.hibernateexception:   hibernate   dialect   must   be   explicitly   set
at   org.hibernate.dialect.dialectfactory.determinedialect(dialectfactory.java:57)
at   org.hibernate.dialect.dialectfactory.builddialect(dialectfactory.java:39)
at   org.hibernate.cfg.settingsfactory.determinedialect(settingsfactory.java:426)
at   org.hibernate.cfg.settingsfactory.buildsettings(settingsfactory.java:128)
at   org.hibernate.cfg.configuration.buildsettings(configuration.java:2009)
at   org.hibernate.cfg.configuration.buildsessionfactory(configuration.java:1292)
at   core.cc.cif.batch.hibernatetestjob.savengtvdata(hibernatetestjob.java:129)
at   core.cc.cif.batch.hibernatetestjob.EXECute(hibernatetestjob.java:69)
at   core.cc.cif.batch.hibernatetestjob.main(hibernatetestjob.java:312)
发表于:2007-09-07 18:16:501楼 得分:0
please   help
发表于:2007-09-07 19:04:102楼 得分:20
hibernate   dialect   must   be   explicitly   set
就是说你hibernate方言没设正确     检查你的hibernate.cfg.xml
<?xml   version= "1.0 "   encoding= "utf-8 "?>
<!doctype   hibernate-configuration
        public   "-//hibernate/hibernate   configuration   dtd//en "
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd ">

<hibernate-configuration>
<session-factory>
<!--   datasource   connection   properties   -->
<property   name= "connection.datasource ">
java:comp/env/jdbc/arts
</property>

<!--   dialect   for   mysql   (innodb)   -->
<property   name= "dialect ">
org.hibernate.dialect.mysqlinnodbdialect
</property>
<property   name= "hibernate.show_sql "> false </property>
<property   name= "hibernate.transaction.factory_class ">
org.hibernate.transaction.jdbctransactionfactory
</property>
<!--   mapping   files   -->
<property   name= "jndi.url "> jdbc:mysql://localhost/arts </property>
<mapping   resource= "smallclass.hbm.xml "   />
</session-factory>
</hibernate-configuration>

这里给你举一个例子   注意 <property   name= "dialect ">
org.hibernate.dialect.mysqlinnodbdialect
</property>
发表于:2007-09-07 22:18:533楼 得分:2
up
发表于:2007-09-08 08:35:444楼 得分:5
cccifngtvinfo.hbm.xml文件需要路径
file   file   =   new   file( "c:\\cccifngtvinfo.hbm.xml ");
configuration   config   =   new   configuration.configure(file);
发表于:2007-09-08 09:57:415楼 得分:5
可能是你的hibernate.properties文件中没有设置dialect
发表于:2007-09-08 10:14:366楼 得分:0
看这个上面的错误提示到是有很多错误   不过我不怎么的懂这个   还在学习中
composite-id   class   does   not   override   equals():equals()方法没有重写。
发表于:2007-09-08 10:15:347楼 得分:10
也有楼上面说的dialect     我是从错误提示上看的
发表于:2007-09-10 09:54:128楼 得分:0
也许是我没说清楚,在我的程序中没有hibernate.cfg.xml这个文件,因为很确切地说db的连接是一个外部连接,而且一直可用,为什么会没有hibernate.cfg.xml这个文件,我感得它是一个有关设置连接db的属性文件,既然已有了connection就没必要了,所以采用可编程配置.

谢谢以上的回复,不过问题还没解决!
发表于:2007-09-10 10:32:459楼 得分:0
hibernate达人在哪里?
发表于:2007-09-10 13:24:2310楼 得分:5
应该加载你的hibernate配置文件吧,你怎么加载的是映射文件呢,
发表于:2007-09-10 13:28:1011楼 得分:5
顶一个
发表于:2007-09-11 14:39:0112楼 得分:0

                        configuration   cfg   =   new   configuration()
                        .addfile( "cccifngtvinfo.hbm.xml ");
偶这样加载映射文件
发表于:2007-09-11 16:32:2913楼 得分:2
不懂,
up
发表于:2007-09-13 09:30:1114楼 得分:0
谢谢顶贴...
发表于:2007-09-13 09:40:5715楼 得分:5
这样加载映射文件肯定是不行的.configuration   cfg   =   new   configuration()本身就是设置加载配置文件的,而你的映射文件里没有任何于配置相关的项.
hibernate是通过配置文件来设置session,然后通过session根据映射文件去操作数据库.你这么做根本就是反过来了.通过映射文件去设置session,然后session再反过来操作映射文件,这样这么可能对呢.
总之,hibernate不是你这么用地
发表于:2007-09-13 10:02:3316楼 得分:10
你的问题应该不是太大,从打印来看,可能是配置有问题,具体情况要你自己看了,
按照freedom2001(天翔)   说得,你在仔细看看,把原理弄懂就好了,
发表于:2007-09-13 10:25:1117楼 得分:0
提供文档给楼上大哥考虑一下:
3.1.   可编程配置方式
net.sf.hibernate.cfg.configuration的一个实例代表了应用程序中所有的java类到关系数据库的映射的集合。这些映射是从一些xml映射文件中编译得来的。你可以得到一个configuration的实例,直接实例化它即可。下面有一个例子,用来从两个xml配置文件中的映射中初始化:  

configuration   cfg   =   new   configuration()
        .addfile( "vertex.hbm.xml ")
        .addfile( "edge.hbm.xml ");
另外一个(或许是更好的)方法是让hibernate自行用getresourceasstream()来装载映射文件。  

configuration   cfg   =   new   configuration()
        .addclass(eg.vertex.class)
        .addclass(eg.edge.class);
hibernate   就会在classpath中寻找叫做/eg/vertex.hbm.xml、/eg/edge.hbm.xml的映射文件。这种方法取消了所有对文件名的硬编码。  

configuration也可以指定一些可选的配置项。  

properties   props   =   new   properties();
...
configuration   cfg   =   new   configuration()
        .addclass(eg.vertex.class)
        .addclass(eg.edge.class)
        .setproperties(props);
configuration是仅在配置期使用的对象,从第一个sessionfactory开始建立的时候,它就失效了。  

3.2.   获取sessionfactory
当所有的映射都被configuration解析之后,应用程序为了得到session实例,必须先得到它的工厂。这个工厂应该是被应用程序的所有线程共享的。当然,hibernate并不禁止你的程序实例化多个sessionfactory。在你使用不止一个数据库的时候,这就有用了。  

sessionfactory   sessions   =   cfg.buildsessionfactory();

3.3.   用户自行提供jdbc连接
sessionfactory可以使用一个用户自行提供的jdbc连接来打开一个session。这种设计可以让应用程序来自己管理jdbc连接。应用程序必须小心,不能在同一个连接上打开多个并行的session。  

java.sql.connection   conn   =   datasource.getconnection();
session   sess   =   sessions.opensession(conn);

//   start   a   new   transaction   (optional)
transaction   tx   =   sess.begintransaction();
上面的最后一行是可选的——应用程序也可能选择自行管理jta或者jdbc事务。当然,假若你使用hibernate   transaction,你的客户代码就可以从底层的实现中抽象出来了。(比如说,你可以将来在需要的时候切换到corba连接,而不需要更改程序代码。)  


而我想做的事情恰恰是 "用户自行提供jdbc连接 "而不是 "hibernate提供的jdbc连接 ",请问配置的属性文件非加载不可吗?不能实现可编程?
发表于:2007-09-13 16:16:1818楼 得分:1
配置文件的问题,检查hibernate.cfg.xml、xxx.hbm.xml等文件
在程序中直接这样写就ok了,sessionfactory   sf   =   new   configuration().buildsessionfactory();
发表于:2007-09-13 16:53:1419楼 得分:0
怎么还没人明白我的意思?
发表于:2007-09-13 17:02:5520楼 得分:0
?
发表于:2007-09-13 17:08:3521楼 得分:10
如果不想用hibernate,而直接采用jdbc方式连接数据库的话,那需要你自己写获得数据库连接的代码
发表于:2007-09-13 17:16:1622楼 得分:0
我想做的事情恰恰是 "用户自行提供jdbc连接 "而不是 "hibernate提供的jdbc连接 ",请问配置的属性文件非加载不可吗?不能实现可编程?
发表于:2007-09-13 17:37:0323楼 得分:20
不管你的连接是哪里的,您得给一个方言的配置,配置的属性文件是得有的啊


快速检索

最新资讯
热门点击