ejb3内构建webservice时,如果用到JPA且数据源配置在EAR包内,压缩发布,会报hibernate实体为映射的错误。
javax.ejb.EJBTransactionRolledbackException: org.hibernate.hql.ast.QuerySyntaxException: User is not mapped,请高人指点迷津。环境:ejb3、jboss5.1、eclipse3.5一下情况均可以正常运行:
1.不使用压缩ear包的发布方式,直接发布ear文件夹。
2.不使用webservice,注释掉@webservice注解
3.数据源local-tx-datasource从jboss-home/server/default/deploy/内的xxx-ds.xml配置。
具体错误:
项目结构如下:|-ejb_01.jar(ejb项目)
-com.yh.beans
User.java
-com.yh.dao
UserDAO.java
UserDAOImpl.java
-com.yh.service
UserService.java
UserServiceImpl.java
WS01.java
WS01Impl.java
-META-INF
persistence.xml
|-ejb_01EAR (ear项目)
-EarContent
-META-INF
-hzyl-ds.xml (数据源配置)主要代码如下:@Entity
public class User {
@Id
@GeneratedValue
private int id;
@Column(length=50)
private String name;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}public interface UserDAO {
public List<User> getAllUsers();
}@Stateless(name = "userDAO")
@Local
public class UserDAOImpl implements UserDAO {
@PersistenceContext(unitName="test")
EntityManager em; @Override
public List<User> getAllUsers() {
Query query = em.createQuery("from User");
return query.getResultList();
}}public interface UserService {
public String getAllUsers();
}@Stateless(name="userService")
@Remote
public class UserServiceImpl implements UserService { @EJB
@IgnoreDependency
UserDAO userDAO;
@Override
public String getAllUsers() {
String names="";
List<User> users = userDAO.getAllUsers();
for(User u : users){
names=names+","+u.getName();
System.out.println(u.getId());
} return names;
}
}@Stateless(name="WS01")
@WebService public interface WS01 {
@WebMethod
public String getAllUsers();
}
public class WS01Impl implements WS01 {
@Override
public String getAllUsers() {
return "hello"; }}
persistence.xml:<?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="test">
<jta-data-source>java:/hzyl-ds</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.show_sql" value="true" />
<!-- 表结构维护策略 -->
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
hzyl-ds.xml:<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>hzyl-ds</jndi-name>
<connection-url>jdbc:mysql://localhost:3309/test</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>123456</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
javax.ejb.EJBTransactionRolledbackException: org.hibernate.hql.ast.QuerySyntaxException: User is not mapped,请高人指点迷津。环境:ejb3、jboss5.1、eclipse3.5一下情况均可以正常运行:
1.不使用压缩ear包的发布方式,直接发布ear文件夹。
2.不使用webservice,注释掉@webservice注解
3.数据源local-tx-datasource从jboss-home/server/default/deploy/内的xxx-ds.xml配置。
具体错误:
项目结构如下:|-ejb_01.jar(ejb项目)
-com.yh.beans
User.java
-com.yh.dao
UserDAO.java
UserDAOImpl.java
-com.yh.service
UserService.java
UserServiceImpl.java
WS01.java
WS01Impl.java
-META-INF
persistence.xml
|-ejb_01EAR (ear项目)
-EarContent
-META-INF
-hzyl-ds.xml (数据源配置)主要代码如下:@Entity
public class User {
@Id
@GeneratedValue
private int id;
@Column(length=50)
private String name;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}public interface UserDAO {
public List<User> getAllUsers();
}@Stateless(name = "userDAO")
@Local
public class UserDAOImpl implements UserDAO {
@PersistenceContext(unitName="test")
EntityManager em; @Override
public List<User> getAllUsers() {
Query query = em.createQuery("from User");
return query.getResultList();
}}public interface UserService {
public String getAllUsers();
}@Stateless(name="userService")
@Remote
public class UserServiceImpl implements UserService { @EJB
@IgnoreDependency
UserDAO userDAO;
@Override
public String getAllUsers() {
String names="";
List<User> users = userDAO.getAllUsers();
for(User u : users){
names=names+","+u.getName();
System.out.println(u.getId());
} return names;
}
}@Stateless(name="WS01")
@WebService public interface WS01 {
@WebMethod
public String getAllUsers();
}
public class WS01Impl implements WS01 {
@Override
public String getAllUsers() {
return "hello"; }}
persistence.xml:<?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="test">
<jta-data-source>java:/hzyl-ds</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.show_sql" value="true" />
<!-- 表结构维护策略 -->
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
hzyl-ds.xml:<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>hzyl-ds</jndi-name>
<connection-url>jdbc:mysql://localhost:3309/test</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>123456</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
解决方案 »
- java HTTP POST返回问题
- 新手请教为什么要使用tx:advice
- JAVA抓取方面关于解析WML页面问题??
- 请问安全问题
- 初学struts,请教个问题
- 100分讨论struts下向formbean传值问题
- 高分求struts分页代码,符合mvc的,急(100)
- struts是否支持多个properties文件?该怎样配置?在线等待,问题解决立即加分!!!
- 有关JBOSS的配置!
- 雪地跪求助:axis 浏览器输入报错,在线等,求助
- 我用ftl文件是不是在我的myeclipse上还要安装freemaker插件啊?
- java.lang.NullPointerException异常怎么处理啊
注解 org.hibernate.hql.ast.QuerySyntaxException: UserBase is not mapped [from User