`
jacky.jihao
  • 浏览: 153693 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在J2SE中使用JPA 访问EntityManager遇到的问题记录

阅读更多
public class Main {
	public static void main(String[] args) {
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("HelloTitan");
		EntityManager em = factory.createEntityManager();
		
		Cabin c = new Cabin();
		c.setId(0);
		c.setBedCount(50);
		c.setDeckLevel(2);
		c.setName("CabinOne");
		c.setShipId(0);
		
		em.persist(c);
		System.out.println( em.contains(c) );
		Cabin b = em.find(Cabin.class, 0);
		System.out.println(b.getName());
		
		em.close();
		factory.close();
	}

}

 

问题一: 

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named HelloTitan
 at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:56)
 at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
 at Main.main(Main.java:10)

 

原因:没有Persistence provider

解决办法:将需要的lib添加到classpath中,Jboss使用的是hibernate实现,这些lib在下面的目录中能找到

jboss-5.0.0.GA\common\lib\

 

hibernate-annotations.jar

hibernate-commons-annotations.jar

hibernate-core.jar

hibernate-entitymanager.jar

hibernate-jmx.jar

hibernate-validation.jar

且还依赖 commons-collections.jar

 

问题二:

Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: HelloTitan] Unable to build EntityManagerFactory
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
	at Main.main(Main.java:10)
Caused by: org.hibernate.HibernateException: Could not find datasource
	at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:79)
	at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:137)
	at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29)
	at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:89)
	at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
	... 4 more
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
	at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
	at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75)
	... 11 more

 

原因:JNDI没有初始化成功

解决办法: 在classpath添加 jnid.properties 文件 (以JBoss为例,配置如下)

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099

 

 

问题三:

程序成功运行,但是数据没有写入数据库

原因:没有提交数据

解决办法:em.getTransaction().commit();

 

 

 

 其他相关记录:

 

 J2SE环境中使用JPA的(Hibernate+MySQL)persistence.xml例子

 如果想使用JNDI的数据源,可以将 non-jta-data-source 这一段的注释去掉,并且注意JNDI的MySqlDS是可访问的!

 

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
	xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
	<persistence-unit name="EntityRelationships"
		transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		
		<!--
		<non-jta-data-source>MySqlDS</non-jta-data-source>
		-->
		<class>cn.heapstack.jpa.entityrelationships.domain.Customer</class>
		<class>cn.heapstack.jpa.entityrelationships.domain.Address</class>
		<class>cn.heapstack.jpa.entityrelationships.domain.CreditCard</class>
		<class>cn.heapstack.jpa.entityrelationships.domain.Phone</class>
		<class>cn.heapstack.jpa.entityrelationships.domain.Ship</class>
		<class>cn.heapstack.jpa.entityrelationships.domain.Cruise</class>
		<properties>
			<property name="hibernate.hbm2ddl.auto" value="update" />
			<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
			<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/ejb3" />
			<property name="hibernate.connection.username" value="root" />
			<property name="hibernate.connection.password" value="root000" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
			<property name="hibernate.show_sql" value="true" />
			<!-- 
			<property name="hibernate.format_sql" value="true" />
			 -->
		</properties>
	</persistence-unit>
</persistence>

 

 

如何在JBoss里配置MySqlDS 数据源?

 

 找到这个文件,并且修改 jboss-5.0.0.GA\docs\examples\jca\mysql-ds.xml

 修改完成之后放到 jboss-5.0.0.GA\server\default\deploy 目录下,重启JBoss就可以了

 同时请参看我的另一篇文章: 使用JNDI查找JBOSS内配置好的数据源遇到的问题 ...

 

 

-----------------------------------------------------

 

 

 

2
1
分享到:
评论

相关推荐

    如何控制JPA的事务

    在JPA中,对于实体的CRUD基本操作,其中涉及事务的是“C”、“U”和“D”,即“新建”、“更新”和“删除”,因为这些操作都会影响数据库中的数据变化,所以必须使用事务保证其一致性;对于“R”查询,只是查询数据...

    j2se中文api.rar

    Java 2 Standard Edition (J2SE) 是 Java 平台的核心部分,主要为桌面应用程序提供运行环境。这个压缩包 "j2se中文api.rar" 内含的是 J2SE 的中文版 API 文档,这对于 Java 开发者来说是一个非常重要的参考资料。API...

    解决j2se中导出jar文件不能显示图片问题

    在 J2SE 中,导出 Jar 文件时经常遇到的问题是图片不能正常显示。本文将总结解决此类问题的方法,包括通过使用外部资源文件的方式和内部资源文件的方式解决问题。 一、通过使用外部资源文件的方式解决 这种方法的...

    j2se中文6.0api

    在J2SE 6.0 API中,有以下几个关键的知识点: 1. **Java基础类库**:包括核心类如`Object`、`String`、`Arrays`等,以及集合框架如`List`、`Set`、`Map`。这些类库为日常编程提供了基本的数据结构和操作方法。 2. ...

    JPA核心知识讲解

    * 在 J2SE 环境中获取 EntityManager * 在 EJB 容器中获取 EntityManager 容器托管的实体管理器: * 事务范围的 EntityManager * 可扩展的 EntityManager 事务范围的 EntityManager: * 使用 @...

    J2SE 中文帮助文档

    **J2SE(Java 2 Platform, Standard Edition)是Java平台的标准版,是Java开发工具和技术的基础,主要用于...J2SE中文帮助文档提供的详细解释和示例将极大地帮助你在实践中运用这些知识,成为一位熟练的Java开发者。**

    j2se1.5中文api

    J2SE 1.5允许在方法签名中使用省略号(...),创建可变参数的方法。这使得方法可以接受任意数量的相同类型的参数,如public void printNumbers(int... nums)。 七、静态导入(Static Import) 静态导入允许将类的...

    j2SE中文API帮助文档

    在J2SE API中文版中,你可以找到以下关键知识点: 1. **类库概述**:J2SE包含了一系列核心类库,如`java.lang`、`java.util`、`java.io`、`java.net`等。`java.lang`是最基础的包,包含了所有Java程序都会用到的...

    j2se_中文版

    8. 内存管理:Java使用垃圾收集器自动管理内存,避免了C++等语言中的内存泄漏问题。程序员无需手动释放内存,但了解如何优化对象生命周期和内存使用仍然是重要的技能。 中文版的J2SE API文档以中文解释了这些核心...

    JPA核心知识总结

    在J2SE环境中,可以通过`Persistence.createEntityManagerFactory()`和`createEntityManager()`创建并使用;在EJB或Web容器中,可以使用`@PersistenceUnit`注解注入`EntityManagerFactory`。 2. **容器托管的实体...

    j2se6中文网页版

    9. **异常处理**:Java的异常处理机制在J2SE 6中得到进一步完善,包括检查型异常和运行时异常的分类,以及try-catch-finally语句块的使用。 10. **垃圾回收与内存管理**:J2SE 6改进了垃圾回收算法,提升了内存管理...

    j2se中文帮助文档

    这些API文档对于理解如何使用Java类库中的各种类和方法至关重要。例如,`java.util`包包含了各种数据结构和算法,如ArrayList、HashMap;`java.io`包提供了处理输入输出的能力,如FileInputStream和PrintWriter;`...

    j2se程序在MyEclipse下使用

    以下将详细介绍如何在MyEclipse中进行J2SE程序的开发和管理。 1. **安装MyEclipse** 首先,你需要下载并安装MyEclipse。确保选择支持J2SE开发的版本。安装过程中,遵循向导步骤,并配置好Java SDK的路径,因为...

    J2SE中表格应用

    根据提供的文件信息,本文将详细解析“J2SE中表格应用”的相关知识点,重点在于如何在Java Swing中使用`JTable`组件,并结合代码示例进行深入分析。 ### J2SE与Swing简介 Java 2 Standard Edition (J2SE) 是Java...

    j2se中文API 经典版3

    这个是j2se的一个中文API,以前也从网上下载了一些j2se的中文api,但都感觉不够人性,后来终于发现了一本,分享下,这个自我感觉很人性,操作用起来特别舒服! 注意:我的上传文件只有15MB,我把它整成了4个包,现在...

    j2se doc 中文版

    7. **内存管理与垃圾收集**:Java 使用自动垃圾收集机制来管理内存,避免了程序员手动释放内存的问题。了解垃圾收集的工作原理和性能影响,可以帮助开发者写出更高效的代码。 8. **JVM 内部机制**:虽然不是 J2SE ...

    J2SE中文API(比较全的版本)

    J2SE中文API,现在能找到的最全的中文文档了!好东西,学好JAVA必备!

    实验1 JAVA开发环境J2SE实验报告.doc

    在本实验中,我们学习了JAVA开发环境J2SE的基本概念和使用方法,并掌握了下载和安装J2SE开发工具的方法,熟悉了J2SE开发工具的使用,编写了简单的Java Application和Java Applet程序,了解了Java源代码、字节码文件...

    J2SE中文API速查手册.chm

    J2SE基本上是Java开发人员必学的基础技能之一,对于J2SE需要经常查询提供类库的使用方法。这里提供了中文版本的J2SE API速查手册,方便开发人员的查询和学习

    j2se中实现jndi的控制、管理

    博客链接中的内容可能深入讨论了如何在实际项目中使用JNDI,例如配置Tomcat的数据源,通过JNDI查找和管理。`JndiEg`这个压缩包文件可能包含了示例代码,帮助理解JNDI的用法。 在实践中,JNDI常被用来在Java应用...

Global site tag (gtag.js) - Google Analytics