Hibernate如何配置
这篇文章主要为大家展示了“Hibernate如何配置”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Hibernate如何配置”这篇文章吧。
1、Hibernate.cfg.xml 主配置Hibernate.cfg.xml是主配置文件,其中配置大体分为3部分:数据库连接信息、其他参数、映射信息!
<!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><!--通常,一个session-factory节点代表一个数据库--><session-factory><!--1.数据库连接配置--><propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><propertyname="hibernate.connection.url">jdbc:mysql:///test</property><propertyname="hibernate.connection.username">root</property><propertyname="hibernate.connection.password">root</property><!--数据库方言配置,hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql--><propertyname="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property><!--2.其他相关配置--><!--2.1显示hibernate在运行时候执行的sql语句--><propertyname="hibernate.show_sql">false</property><!--2.2格式化sql--><propertyname="hibernate.format_sql">true</property><!--2.3自动建表--><propertyname="hibernate.hbm2ddl.auto">update</property><!--3.加载所有映射--><mappingresource="com/rk/hibernate/a_hello/Employee.hbm.xml"/></session-factory></hibernate-configuration>1.1、数据库连接参数配置
##MySQL#hibernate.dialectorg.hibernate.dialect.MySQLDialect#hibernate.dialectorg.hibernate.dialect.MySQLInnoDBDialect#hibernate.dialectorg.hibernate.dialect.MySQLMyISAMDialect#hibernate.connection.driver_classcom.mysql.jdbc.Driver#hibernate.connection.urljdbc:mysql:///test#hibernate.connection.usernamegavin#hibernate.connection.password1.2、自动建表
#hibernate.hbm2ddl.autocreate-drop每次在创建sessionFactory时候执行创建表;当调用sesisonFactory的close方法的时候,删除表!#hibernate.hbm2ddl.autocreate每次都重新建表;如果表已经存在就先删除再创建#hibernate.hbm2ddl.autoupdate如果表不存在就创建;表存在就不创建;#hibernate.hbm2ddl.autovalidate(生成环境时候)执行验证:当映射文件的内容与数据库表结构不一样的时候就报错!根据hibernate.cfg.xml文件自动建表
importorg.hibernate.cfg.Configuration;importorg.hibernate.tool.hbm2ddl.SchemaExport;publicclassApp{publicstaticvoidmain(String[]args){//创建配置管理类对象Configurationconfig=newConfiguration();//加载主配置文件config.configure();//创建工具类对象SchemaExportexport=newSchemaExport(config);//建表//第一个参数:是否在控制台打印建表语句//第二个参数:是否执行脚本export.create(true,true);}}1.3、常用配置参考文件
常用配置参考文件:hibernate-distribution-3.6.0.Final\project\etc\hibernate.properties
#########################QueryLanguage###########################definequerylanguageconstants/functionnameshibernate.query.substitutionsyes'Y',no'N'##selecttheclassicqueryparser#hibernate.query.factory_classorg.hibernate.hql.classic.ClassicQueryTranslatorFactory####################Platforms######################JNDIDatasource#hibernate.connection.datasourcejdbc/test#hibernate.connection.usernamedb2#hibernate.connection.passworddb2##HypersonicSQLhibernate.dialectorg.hibernate.dialect.HSQLDialecthibernate.connection.driver_classorg.hsqldb.jdbcDriverhibernate.connection.usernamesahibernate.connection.passwordhibernate.connection.urljdbc:hsqldb:./build/db/hsqldb/hibernate#hibernate.connection.urljdbc:hsqldb:hsql://localhost#hibernate.connection.urljdbc:hsqldb:test##H2(www.h3database.com)#hibernate.dialectorg.hibernate.dialect.H2Dialect#hibernate.connection.driver_classorg.h3.Driver#hibernate.connection.usernamesa#hibernate.connection.password#hibernate.connection.urljdbc:h3:mem:./build/db/h3/hibernate#hibernate.connection.urljdbc:h3:testdb/h3test#hibernate.connection.urljdbc:h3:mem:imdb1#hibernate.connection.urljdbc:h3:tcp://dbserv:8084/sample;#hibernate.connection.urljdbc:h3:ssl://secureserv:8085/sample;#hibernate.connection.urljdbc:h3:ssl://secureserv/testdb;cipher=AES##MySQL#hibernate.dialectorg.hibernate.dialect.MySQLDialect#hibernate.dialectorg.hibernate.dialect.MySQLInnoDBDialect#hibernate.dialectorg.hibernate.dialect.MySQLMyISAMDialect#hibernate.connection.driver_classcom.mysql.jdbc.Driver#hibernate.connection.urljdbc:mysql:///test#hibernate.connection.usernamegavin#hibernate.connection.password##Oracle#hibernate.dialectorg.hibernate.dialect.Oracle8iDialect#hibernate.dialectorg.hibernate.dialect.Oracle9iDialect#hibernate.dialectorg.hibernate.dialect.Oracle10gDialect#hibernate.connection.driver_classoracle.jdbc.driver.OracleDriver#hibernate.connection.usernameora#hibernate.connection.passwordora#hibernate.connection.urljdbc:oracle:thin:@localhost:1521:orcl#hibernate.connection.urljdbc:oracle:thin:@localhost:1522:XE##PostgreSQL#hibernate.dialectorg.hibernate.dialect.PostgreSQLDialect#hibernate.connection.driver_classorg.postgresql.Driver#hibernate.connection.urljdbc:postgresql:template1#hibernate.connection.usernamepg#hibernate.connection.password##DB2#hibernate.dialectorg.hibernate.dialect.DB2Dialect#hibernate.connection.driver_classcom.ibm.db2.jcc.DB2Driver#hibernate.connection.driver_classCOM.ibm.db2.jdbc.app.DB2Driver#hibernate.connection.urljdbc:db2://localhost:50000/somename#hibernate.connection.urljdbc:db2:somename#hibernate.connection.usernamedb2#hibernate.connection.passworddb2##TimesTen#hibernate.dialectorg.hibernate.dialect.TimesTenDialect#hibernate.connection.driver_classcom.timesten.jdbc.TimesTenDriver#hibernate.connection.urljdbc:timesten:direct:test#hibernate.connection.username#hibernate.connection.password##DB2/400#hibernate.dialectorg.hibernate.dialect.DB2400Dialect#hibernate.connection.usernameuser#hibernate.connection.passwordpassword##Nativedriver#hibernate.connection.driver_classCOM.ibm.db2.jdbc.app.DB2Driver#hibernate.connection.urljdbc:db2://systemname##Toolboxdriver#hibernate.connection.driver_classcom.ibm.as400.access.AS400JDBCDriver#hibernate.connection.urljdbc:as400://systemname##Derby(notsupported!)#hibernate.dialectorg.hibernate.dialect.DerbyDialect#hibernate.connection.driver_classorg.apache.derby.jdbc.EmbeddedDriver#hibernate.connection.username#hibernate.connection.password#hibernate.connection.urljdbc:derby:build/db/derby/hibernate;create=true##Sybase#hibernate.dialectorg.hibernate.dialect.SybaseDialect#hibernate.connection.driver_classcom.sybase.jdbc2.jdbc.SybDriver#hibernate.connection.usernamesa#hibernate.connection.passwordsasasa#hibernate.connection.urljdbc:sybase:Tds:co3061835-a:5000/tempdb##MckoiSQL#hibernate.dialectorg.hibernate.dialect.MckoiDialect#hibernate.connection.driver_classcom.mckoi.JDBCDriver#hibernate.connection.urljdbc:mckoi:///#hibernate.connection.urljdbc:mckoi:local://C:/mckoi1.0.3/db.conf#hibernate.connection.usernameadmin#hibernate.connection.passwordnimda##SAPDB#hibernate.dialectorg.hibernate.dialect.SAPDBDialect#hibernate.connection.driver_classcom.sap.dbtech.jdbc.DriverSapDB#hibernate.connection.urljdbc:sapdb://localhost/TST#hibernate.connection.usernameTEST#hibernate.connection.passwordTEST#hibernate.query.substitutionsyes'Y',no'N'##MSSQLServer#hibernate.dialectorg.hibernate.dialect.SQLServerDialect#hibernate.connection.usernamesa#hibernate.connection.passwordsa##JSQLDriver#hibernate.connection.driver_classcom.jnetdirect.jsql.JSQLDriver#hibernate.connection.urljdbc:JSQLConnect://1E1/test##JTURBODriver#hibernate.connection.driver_classcom.newatlanta.jturbo.driver.Driver#hibernate.connection.urljdbc:JTurbo://1E1:1433/test##WebLogicDriver#hibernate.connection.driver_classweblogic.jdbc.mssqlserver4.Driver#hibernate.connection.urljdbc:weblogic:mssqlserver4:1E1:1433##MicrosoftDriver(notrecommended!)#hibernate.connection.driver_classcom.microsoft.jdbc.sqlserver.SQLServerDriver#hibernate.connection.urljdbc:microsoft:sqlserver://1E1;DatabaseName=test;SelectMethod=cursor##TheNewMicrosoftDriver#hibernate.connection.driver_classcom.microsoft.sqlserver.jdbc.SQLServerDriver#hibernate.connection.urljdbc:sqlserver://localhost##jTDS(sinceversion0.9)#hibernate.connection.driver_classnet.sourceforge.jtds.jdbc.Driver#hibernate.connection.urljdbc:jtds:sqlserver://1E1/test##Interbase#hibernate.dialectorg.hibernate.dialect.InterbaseDialect#hibernate.connection.usernamesysdba#hibernate.connection.passwordmasterkey##DONOTspecifyhibernate.connection.sqlDialect##InterClient#hibernate.connection.driver_classinterbase.interclient.Driver#hibernate.connection.urljdbc:interbase://localhost:3060/C:/firebird/test.gdb##PureJava#hibernate.connection.driver_classorg.firebirdsql.jdbc.FBDriver#hibernate.connection.urljdbc:firebirdsql:localhost/3050:/firebird/test.gdb##Pointbase#hibernate.dialectorg.hibernate.dialect.PointbaseDialect#hibernate.connection.driver_classcom.pointbase.jdbc.jdbcUniversalDriver#hibernate.connection.urljdbc:pointbase:embedded:sample#hibernate.connection.usernamePBPUBLIC#hibernate.connection.passwordPBPUBLIC##Ingres##olderversions(beforeIngress2006)#hibernate.dialectorg.hibernate.dialect.IngresDialect#hibernate.connection.driver_classca.edbc.jdbc.EdbcDriver#hibernate.connection.urljdbc:edbc://localhost:II7/database#hibernate.connection.usernameuser#hibernate.connection.passwordpassword##Ingres2006orlater#hibernate.dialectorg.hibernate.dialect.IngresDialect#hibernate.connection.driver_classcom.ingres.jdbc.IngresDriver#hibernate.connection.urljdbc:ingres://localhost:II7/database;CURSOR=READONLY;auto=multi#hibernate.connection.usernameuser#hibernate.connection.passwordpassword##MimerSQL#hibernate.dialectorg.hibernate.dialect.MimerSQLDialect#hibernate.connection.driver_classcom.mimer.jdbc.Driver#hibernate.connection.urljdbc:mimer:multi1#hibernate.connection.usernamehibernate#hibernate.connection.passwordhibernate##InterSystemsCache#hibernate.dialectorg.hibernate.dialect.Cache71Dialect#hibernate.connection.driver_classcom.intersys.jdbc.CacheDriver#hibernate.connection.username_SYSTEM#hibernate.connection.passwordSYS#hibernate.connection.urljdbc:Cache://127.0.0.1:1972/HIBERNATE####################################HibernateConnectionPool####################################hibernate.connection.pool_size1##############################C3P0ConnectionPool###############################hibernate.c3p0.max_size2#hibernate.c3p0.min_size2#hibernate.c3p0.timeout5000#hibernate.c3p0.max_statements100#hibernate.c3p0.idle_test_period3000#hibernate.c3p0.acquire_increment2#hibernate.c3p0.validatefalse#################################ProxoolConnectionPool###################################PropertiesforexternalconfigurationofProxoolhibernate.proxool.pool_aliaspool1##Onlyneedoneofthefollowing#hibernate.proxool.existing_pooltrue#hibernate.proxool.xmlproxool.xml#hibernate.proxool.propertiesproxool.properties####################################PluginConnectionProvider######################################useacustomConnectionProvider(ifnotset,Hibernatewillchooseabuilt-inConnectionProviderusinghueristics)#hibernate.connection.provider_classorg.hibernate.connection.DriverManagerConnectionProvider#hibernate.connection.provider_classorg.hibernate.connection.DatasourceConnectionProvider#hibernate.connection.provider_classorg.hibernate.connection.C3P0ConnectionProvider#hibernate.connection.provider_classorg.hibernate.connection.ProxoolConnectionProvider##########################TransactionAPI############################EnableautomaticflushduringtheJTAbeforeCompletion()callback##(ThissettingisrelevantwithorwithouttheTransactionAPI)#hibernate.transaction.flush_before_completion##Enableautomaticsessioncloseattheendoftransaction##(ThissettingisrelevantwithorwithouttheTransactionAPI)#hibernate.transaction.auto_close_session##theTransactionAPIabstractsapplicationcodefromtheunderlyingJTAorJDBCtransactions#hibernate.transaction.factory_classorg.hibernate.transaction.JTATransactionFactory#hibernate.transaction.factory_classorg.hibernate.transaction.JDBCTransactionFactory##touseJTATransactionFactory,HibernatemustbeabletolocatetheUserTransactioninJNDI##defaultisjava:comp/UserTransaction##youdoNOTneedthissettingifyouspecifyhibernate.transaction.manager_lookup_class#jta.UserTransactionjta/usertransaction#jta.UserTransactionjavax.transaction.UserTransaction#jta.UserTransactionUserTransaction##tousethesecond-levelcachewithJTA,HibernatemustbeabletoobtaintheJTATransactionManager#hibernate.transaction.manager_lookup_classorg.hibernate.transaction.JBossTransactionManagerLookup#hibernate.transaction.manager_lookup_classorg.hibernate.transaction.WeblogicTransactionManagerLookup#hibernate.transaction.manager_lookup_classorg.hibernate.transaction.WebSphereTransactionManagerLookup#hibernate.transaction.manager_lookup_classorg.hibernate.transaction.OrionTransactionManagerLookup#hibernate.transaction.manager_lookup_classorg.hibernate.transaction.ResinTransactionManagerLookup#################################MiscellaneousSettings###################################printallgeneratedSQLtotheconsole#hibernate.show_sqltrue##formatSQLinlogandconsolehibernate.format_sqltrue##addcommentstothegeneratedSQL#hibernate.use_sql_commentstrue##generatestatistics#hibernate.generate_statisticstrue##autoschemaexport#hibernate.hbm2ddl.autocreate-drop#hibernate.hbm2ddl.autocreate#hibernate.hbm2ddl.autoupdate#hibernate.hbm2ddl.autovalidate##specifyadefaultschemaandcatalogforunqualifiedtablenames#hibernate.default_schematest#hibernate.default_catalogtest##enableorderingofSQLUPDATEsbyprimarykey#hibernate.order_updatestrue##setthemaximumdepthoftheouterjoinfetchtreehibernate.max_fetch_depth1##setthedefaultbatchsizeforbatchfetching#hibernate.default_batch_fetch_size8##rollbackgeneratedidentifiervaluesofdeletedentitiestodefaultvalues#hibernate.use_identifer_rollbacktrue##enablebytecodereflectionoptimizer(disabledbydefault)#hibernate.bytecode.use_reflection_optimizertrue########################JDBCSettings##########################specifyaJDBCisolationlevel#hibernate.connection.isolation4##enableJDBCautocommit(notrecommended!)#hibernate.connection.autocommittrue##settheJDBCfetchsize#hibernate.jdbc.fetch_size25##setthemaximumJDBC2batchsize(anonzerovalueenablesbatching)#hibernate.jdbc.batch_size5#hibernate.jdbc.batch_size0##enablebatchupdatesevenforversioneddatahibernate.jdbc.batch_versioned_datatrue##enableuseofJDBC2scrollableResultSets(specifyingaDialectwillcauseHibernatetouseasensibledefault)#hibernate.jdbc.use_scrollable_resultsettrue##usestreamswhenwritingbinarytypesto/fromJDBChibernate.jdbc.use_streams_for_binarytrue##useJDBC3PreparedStatement.getGeneratedKeys()togettheidentifierofaninsertedrow#hibernate.jdbc.use_get_generated_keysfalse##chooseacustomJDBCbatcher#hibernate.jdbc.factory_class##enableJDBCresultsetcolumnaliascaching##(minorperformanceenhancementforbrokenJDBCdrivers)#hibernate.jdbc.wrap_result_sets##chooseacustomSQLexceptionconverter#hibernate.jdbc.sql_exception_converter#############################Second-levelCache###############################optimizechacheforminimal"puts"insteadofminimal"gets"(goodforclusteredcache)#hibernate.cache.use_minimal_putstrue##setaprefixforcacheregionnameshibernate.cache.region_prefixhibernate.test##disablethesecond-levelcache#hibernate.cache.use_second_level_cachefalse##enablethequerycache#hibernate.cache.use_query_cachetrue##storethesecond-levelcacheentriesinamorehuman-friendlyformat#hibernate.cache.use_structured_entriestrue##chooseacacheimplementation#hibernate.cache.provider_classorg.hibernate.cache.EhCacheProvider#hibernate.cache.provider_classorg.hibernate.cache.EmptyCacheProviderhibernate.cache.provider_classorg.hibernate.cache.HashtableCacheProvider#hibernate.cache.provider_classorg.hibernate.cache.TreeCacheProvider#hibernate.cache.provider_classorg.hibernate.cache.OSCacheProvider#hibernate.cache.provider_classorg.hibernate.cache.SwarmCacheProvider##chooseacustomquerycacheimplementation#hibernate.cache.query_cache_factory###############JNDI#################specifyaJNDInamefortheSessionFactory#hibernate.session_factory_namehibernate/session_factory##HibernateusesJNDItobindanametoaSessionFactoryandtolookuptheJTAUserTransaction;##ifhibernate.jndi.*arenotspecified,HibernatewillusethedefaultInitialContext()which##isthebestapproachinanapplicationserver#filesystem#hibernate.jndi.classcom.sun.jndi.fscontext.RefFSContextFactory#hibernate.jndi.urlfile:/#WebSphere#hibernate.jndi.classcom.ibm.websphere.naming.WsnInitialContextFactory#hibernate.jndi.urliiop://localhost:900/2、映射配置
1、普通字段类型
2、主键映射
a)单列主键映射
b)多列作为主键映射
Employee.hbm.xml
<?xmlversion="1.0"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><!--映射文件:映射一个实体类对象;描述一个对象最终实现可以直接保存对象数据到数据库中。--><!--package:要映射的对象所在的包(可选,如果不指定,此文件所有的类都要指定全路径)auto-import默认为true,在写hql的时候自动导入包名如果指定为false,在写hql的时候必须要写上类的全名;如:session.createQuery("fromcom.rk.hibernate.d_hbm_config.Employee").list();--><hibernate-mappingpackage="com.rk.hibernate.d_hbm_config"auto-import="true"><!--class映射某一个对象的(一般情况,一个对象写一个映射文件,即一个class节点)name指定要映射的对象的类型table指定对象对应的表;如果没有指定表名,默认与对象名称一样--><classname="Employee"table="employee"><!--主键,映射--><idname="empId"column="id"><!--主键的生成策略identity自增长(mysql,db2)sequence自增长(序列),oracle中自增长是以序列方法实现native自增长【会根据底层数据库自增长的方式选择identity或sequence】如果是mysql数据库,采用的自增长方式是identity如果是oracle数据库,使用sequence序列的方式实现自增长increment自增长(会有并发访问的问题,一般在服务器集群环境使用会存在问题。)assigned指定主键生成策略为手动指定主键的值uuid指定uuid随机生成的唯一的值foreign(外键的方式,one-to-one讲)--><generatorclass="uuid"/></id><!--普通字段映射propertyname指定对象的属性名称column指定对象属性对应的表的字段名称,如果不写默认与对象属性一致。length指定字符的长度,默认为255(只适用于字符串类型)type指定映射表的字段的类型,如果不指定会匹配属性的类型java类型:必须写全名java.lang.Stringhibernate类型:直接写类型,都是小写string--><propertyname="empName"column="empName"type="string"length="20"></property><propertyname="workDate"column="workDate"type="java.util.Date"></property><!--如果列名称为数据库关键字,需要用反引号或改列名。--><propertyname="desc"column="`desc`"type="java.lang.String"></property></class></hibernate-mapping>
Employee.java
packagecom.rk.hibernate.d_hbm_config;importjava.util.Date;publicclassEmployee{privateStringempId;privateStringempName;privateDateworkDate;privateStringdesc;publicStringgetEmpId(){returnempId;}publicvoidsetEmpId(StringempId){this.empId=empId;}publicStringgetEmpName(){returnempName;}publicvoidsetEmpName(StringempName){this.empName=empName;}publicDategetWorkDate(){returnworkDate;}publicvoidsetWorkDate(DateworkDate){this.workDate=workDate;}publicStringgetDesc(){returndesc;}publicvoidsetDesc(Stringdesc){this.desc=desc;}@OverridepublicStringtoString(){return"Employee[empId="+empId+",empName="+empName+",workDate="+workDate+",desc="+desc+"]";}}
App.java
packagecom.rk.hibernate.d_hbm_config;importjava.util.Date;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.Transaction;importorg.hibernate.cfg.Configuration;importorg.junit.Test;publicclassApp{privatestaticSessionFactorysessionFactory;static{sessionFactory=newConfiguration().configure().addClass(Employee.class)//会自动加载映射文件:Employee.hbm.xml。这样,在hibernate.cfg.xml中就不用添加映射了.buildSessionFactory();}@TestpublicvoidtestSave(){Sessionsession=null;Transactiontx=null;try{Employeeemp=newEmployee();emp.setEmpName("Tom");emp.setWorkDate(newDate());emp.setDesc("这里是描述");session=sessionFactory.openSession();tx=session.beginTransaction();session.save(emp);System.out.println("执行结束!");}catch(Exceptione){thrownewRuntimeException(e);}finally{tx.commit();session.close();}}}3、数据库问题
(1)一个表能否有多个主键? 不能。
(2)为什么要设置主键? 数据库存储的数据都是有效的,必须保持唯一。
(3)为什么把id作为主键?因为表中通常找不到合适的列作为唯一列即主键,所以为了方法用id列,因为id是数据库系统维护可以保证唯一,所以就把这列作为主键!
(4)联合/复合主键。如果找不到合适的列作为主键,出来用id列以外,我们一般用联合主键,即多列的值作为一个主键,从而确保记录的唯一性。
联合主键的案例
CompositeKeys.java
packagecom.rk.hibernate.e_compositekey;importjava.io.Serializable;//复合主键类publicclassCompositeKeysimplementsSerializable{privateStringusername;privateStringaddress;publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username;}publicStringgetAddress(){returnaddress;}publicvoidsetAddress(Stringaddress){this.address=address;}}
User.java
packagecom.rk.hibernate.e_compositekey;publicclassUser{//名字跟地址,不会重复privateCompositeKeyspkeys;privateintage;publicCompositeKeysgetPkeys(){returnpkeys;}publicvoidsetPkeys(CompositeKeyspkeys){this.pkeys=pkeys;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}@OverridepublicStringtoString(){return"User[username="+pkeys.getUsername()+",address="+pkeys.getAddress()+",age="+age+"]";}}
User.hbm.xml
<?xmlversion="1.0"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mappingpackage="com.rk.hibernate.e_compositekey"auto-import="true"><classname="User"table="t_users"><composite-idname="pkeys"><key-propertyname="username"type="string"></key-property><key-propertyname="address"type="string"></key-property></composite-id><propertyname="age"column="age"type="int"></property></class></hibernate-mapping>
App.java
packagecom.rk.hibernate.e_compositekey;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.Transaction;importorg.hibernate.cfg.Configuration;importorg.junit.Test;publicclassApp{privatestaticSessionFactorysessionFactory;static{sessionFactory=newConfiguration().configure().addClass(User.class).buildSessionFactory();}@TestpublicvoidtestSave(){Sessionsession=null;Transactiontx=null;try{//对象CompositeKeyspkeys=newCompositeKeys();pkeys.setAddress("火星");pkeys.setUsername("小明");Useru=newUser();u.setPkeys(pkeys);u.setAge(20);//保存session=sessionFactory.openSession();tx=session.beginTransaction();session.save(u);System.out.println("执行结束!");}catch(Exceptione){thrownewRuntimeException(e);}finally{tx.commit();session.close();}}@TestpublicvoidtestQuery(){Sessionsession=null;Transactiontx=null;try{//构建复合主键CompositeKeyspkeys=newCompositeKeys();pkeys.setAddress("火星");pkeys.setUsername("小明");//查询session=sessionFactory.openSession();tx=session.beginTransaction();Useru=(User)session.get(User.class,pkeys);System.out.println(u);System.out.println("执行结束!");}catch(Exceptione){thrownewRuntimeException(e);}finally{tx.commit();session.close();}}}
以上是“Hibernate如何配置”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。