当前位置:编程学习 > JAVA >>

ejb3内webservice发布ear包时报org.hibernate.hql.ast.QuerySyntaxException: is not mapped

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>
--------------------编程问答-------------------- 这个问题没有人碰到吗??? --------------------编程问答-------------------- 求解
注解 org.hibernate.hql.ast.QuerySyntaxException: UserBase is not mapped [from User

补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,