使用hibernate5.2.10编写hibernate helloworld
2017-09-12 20:49
218 查看
今天刚开始学习Hibernate,在写 helloworld过程中,通过 Hibernate API 编写访问数据库的代码时出现错误。原因是最新版本5.2.10已经不再使用 ServiceRegistry 来获得 SessionFactory。具体代码: (oracle数据库)
hibernate.temp.use_jdbc_metadata_defaults=false
以下为helloworld全部代码:
News.java
hibernate.cfg.xml
News.hbm.xml(本人使用了 hibernate tools,该代码为生成代码)
HibernateTest.java
最后感谢这两位朋友,看了他们的文章和网上各种论坛里的评论我才茅塞顿开
http://blog.csdn.net/bakbeom/article/details/77850909 http://blog.csdn.net/xinteng2012/article/details/38709653
SessionFactory sessionFactory; Session session; Transaction transaction; //创建 Configuration 对象:对应 hibernate 的基本配置信息和 对象关系映射信息 Configuration configuration = new Configuration().configure(); //5.2.10版本.调用Configuration的buildSessionFactory()方法返回一个SessionFactory对象 sessionFactory = configuration.buildSessionFactory(); //4.x版本. 创建一个 ServiceRegistry 对象: hibernate 4.x 新添加的对象 //hibernate 的任何配置和服务都需要在该对象中注册后才能有效. //ServiceRegistry serviceRegistry = // new ServiceRegistryBuilder().applySettings(configuration.getProperties()) // .buildServiceRegistry(); //sessionFactory = configuration.buildSessionFactory(serviceRegistry); //从SessionFactory 中获取 Session 对象 session = sessionFactory.openSession(); //开启事务 transaction = session.beginTransaction(); //执行保存操作 News news = new News("Java","LOVEYIYI",new Date(new java.util.Date().getTime())); session.save(news); //提交事务 transaction.commit(); //关闭 Session session.close(); //关闭 SessionFactory sessionFactory.close();代码实现后,用JUit4测试会出现 Disabling contextual LOB creation as createClob() method threw error : java.lang 异常,这是因为Hibernate默认获取方式是jdbc,如果使用连接池的方式的话,需要在src下新建一个hibernate.properties,或者在配置文件里,写上一句
hibernate.temp.use_jdbc_metadata_defaults=false
以下为helloworld全部代码:
News.java
import java.sql.Date; public class News { private Integer id; private String title; private String author; private Date datetime; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public Date getDatetime() { return datetime; } public void setDatetime(Date datetime) { this.datetime = datetime; } public News(String title, String author, Date datetime) { super(); this.title = title; this.author = author; this.datetime = datetime; } public News() { super(); // TODO Auto-generated constructor stub } @Override public String toString() { return "News [id=" + id + ", title=" + title + ", author=" + author + ", datetime=" + datetime + "]"; } }
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 配置连接数据库的基本信息 --> <property name="connect 95d9 ion.username">scott</property> <property name="connection.password">tiger</property> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="connection.url">jdbc:oracle:thin:@localhost:1521:ORCL</property> <!-- 配置 hibernate 的基本信息 --> <!-- hibernate 所使用的数据库方言 --> <property name="dialect">org.hibernate.dialect.Oracle9iDialect</property> <!-- 执行操作时是否在控制台打印SQL --> <property name="show_sql">true</property> <!-- 是否对 SQL 进行格式化 --> <property name="hibernate.format_sql">true</property> <!-- 指定自动生成数据表的策略 --> <property name="hbm2ddl.auto">update</property> <!-- 指定关联的 .hbm.xml文件 --> <mapping resource="com/loveyiyi/hibernate/helloworld/News.hbm.xml"/> </session-factory> </hibernate-configuration>
News.hbm.xml(本人使用了 hibernate tools,该代码为生成代码)
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated 2017-9-12 11:20:46 by Hibernate Tools 3.5.0.Final --> <hibernate-mapping> <class name="com.loveyiyi.hibernate.helloworld.News" table="NEWS"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <!-- 指定主键的生成方式 ,native:使用数据库本地方式--> <generator class="native" /> </id> <property name="title" type="java.lang.String"> <column name="TITLE" /> </property> <property name="author" type="java.lang.String"> <column name="AUTHOR" /> </property> <property name="datetime" type="java.sql.Date"> <column name="DATETIME" /> </property> </class> </hibernate-mapping>
HibernateTest.java
import static org.junit.Assert.*; import java.sql.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.junit.Test; public class HibernateTest { @Test public void test() { SessionFactory sessionFactory; Session session; Transaction transaction; //创建 Configuration 对象:对应 hibernate 的基本配置信息和 对象关系映射信息 Configuration configuration = new Configuration().configure(); //调用Configuration的buildSessionFactory()方法返回一个SessionFactory对象 sessionFactory = configuration.buildSessionFactory(); //从SessionFactory 中获取 Session 对象 session = sessionFactory.openSession(); //开启事务 transaction = session.beginTransaction(); //执行保存操作 News news = new News("C#","C++",new Date(new java.util.Date().getTime())); session.save(news); //提交事务 transaction.commit(); //关闭 Session session.close(); //关闭 SessionFactory sessionFactory.close(); } }
最后感谢这两位朋友,看了他们的文章和网上各种论坛里的评论我才茅塞顿开
http://blog.csdn.net/bakbeom/article/details/77850909 http://blog.csdn.net/xinteng2012/article/details/38709653
相关文章推荐
- lesson 11:. 使用UDP协议编写一个网络程序,设置接收端程序的监听端口是8001,发送端发送的数据是“Hello, world”。
- 使用C#编写不同的"Hello World"程序(转)
- 使用UDP协议编写一个网络程序,设置接收端程序的监听端口是8001,发送端发送的数据是“Hello, world”。
- 使用UDP协议编写一个网络程序,设置接收端程序的监听端口是8001,发送端发送的数据是“Hello, world”。
- 使用UDP协议编写一个网络程序,设置接收端程序的监听端口是8001,发送端发送的数据是“Hello, world”
- 使用UDP协议编写一个网络程序,设置接收端程序的监听端口是8001,发送端发送的数据是“Hello, world”。
- 使用UDP协议编写一个网络程序,设置接收端程序的监听端口是8001,发送端发送的数据是“Hello, world”。
- 不使用main编写的“Hello,World”
- 使用TCP协议编写一个网络程序,设置服务器端的监听端口是8002,当与客户端建立连接后,服务器端向客户端发送数据“Hello, world”,客户端收到数据后打印输出。
- 使用TCP协议编写一个网络程序,设置服务器端的监听端口是8002,当与客户端建立连接后,服务器端向客户端发送数据“Hello, world”,客户端收到数据后打印输出
- 使用UDP协议编写一个网络程序,设置接收端程序的监听端口是8001,发送端发送的数据是“Hello, world”。
- 使用TCP协议编写一个网络程序,设置服务器端的监听端口是8002,当与客户端建立连接后,服务器端向客户端发送数据“Hello, world”,客户端收到数据后打印输出。
- 使用TCP协议编写一个网络程序,设置服务器端的监听端口是8002,当与客户端建立连接后,服务器端向客户端发送数据“Hello, world”,客户端收到数据后打印输出。
- 使用pthreads基本函数编写helloworld.c
- 使用Intellij编写Spring Hello World
- apache module helloworld, Linux平台使用C编写网页 CGI helloword 实例
- 使用Intellij编写Spring Hello World
- lesson 11:使用TCP协议编写一个网络程序,设置服务器端的监听端口是8002,当与客户端建立连接后,服务器端向客户端发送数据“Hello, world”,客户端收到数据后打印输出。
- 教程:使用 Xcode 编写 Mac OS X 下的"Hello, World!"
- Serverless 框架 OpenWhisk 开发指南:使用 Node.js 编写 hello, world