public List<User> fetchUserByRand(int numbers) throws Exception {
// TODO Auto-generated method stub
javax.persistence.Query _query;
StringBuffer _queryQL=new StringBuffer("SELECT * FROM user");
_queryQL.append(" ORDER BY RAND() LIMIT ");
_queryQL.append(numbers);
_query=getEntityManager().createNativeQuery(_queryQL.toString(),User.class);
List<User> result =_query.getResultList();
return result.isEmpty()?null:result;
}
功能: 根据numbers 多少,在表user里随机查询出多少人。
补充下其他原生SQL:【我采用的是第二种:简单实体的原生查询】
原生查询
EntityManager接口有三个创建原生查询的方法:一个返回标量值,一个返回实体类型,还有一个返回多个实体与标量值组合
标量原生查询
createNativeQuery(String sql);
简单实体的原生查询
createNativeQuery(String sql,Class
entityClass);根据某个实体定义好的映射元数据,将返回值映射到该实体
复杂原生查询
createNativeQuery(String sql,String mappingName)
返回多个实体
@Entity
@SqlResultSetMapping(name=”customerAndCreditCardMapping”,//映射名
entities={@EntityResult(entityClass=Customer.class),//entities指定映射的实体
@EntityResult(entityClass=CreditCard.class,
fields={@FieldResult(name=”id”,column=”CC_ID”),//指定实体内成员与返回字段的映射
@FieldResult(name=”number”,column=”number”)})
})
public class
Customer{………}
等价XML
<entity-mappings>
<sel-result-set-mapping name=”
customerAndCreditCardMapping”>
<entity-result
entity-class=”com.titan.domain.Customer”/>
<entity-result
entity-class=”com.titan.domain.CreditCard”>
<field-result name=”id”
column=”CC_ID”/>
<field-result name=”number”
column=”number”/>
</entity-result>
</sel-result-set-mapping>
</entity-mappings>
使用方法
String
sql=”select c.id,c.firstName,cc.id As CC_IC,cc.number from
CUST_TABEL
c,CREDIT_CARD_TABLE cc….”
manager.createNativeQuery(sql,”customerAndCreditCardMapping”);
返回结果既有标量也有实体
@SqlResultSetMapping(name=”reservationCount”,//映射名
entities={@EntityResult(entityClass=Cruise.class,
fields={@FieldResult(name=”id”,column=”id”) })},
columns={@ColumnsResult(name=”resCount”)}//标量
)
@Entity
public class
Cruise{……}
等价XML
<entity-mappings>
<sel-result-set-mapping name=”
reservationCount”>
<entity-result
entity-class=”com.titan.domain.Cruise”>
<field-result name=”id”
column=”id”/>
</entity-result>
<column-result name=”resCount”>
</sel-result-set-mapping>
</entity-mappings>
使用方法
String
sql=”select c.id,count(Resrvation.id) as resCount from Cruise c
left join
Reservation
on c.id=………..”;
manager.createNativeQuery(sql,” reservationCount”);
具名EJB QL查询
预先定义好EJB
QL或原生的SQL查询
使用@javax.persistence.NamedQuery用来预定EJB
QL的,NamedQuerys用于定义多条查询
@NamedQuerys({
NamedQuery(name=”getAverageReservateion”,//名字
query=”select AVG(r.amountPaid) from Cruise As c Join c.reservatons
r where
c=:cruise”),//EJB QL
NamedQuery(……)
})
@Entity
public class
Cruise{…….}
等价XML
<entity-mapping>
<named-query name=”
getAverageReservateion”>
<query>
EJB QL
</query>
</ named-query >
</entity-mapping >
使用方式
Query
query=em.createNamedQuery(“getAverageReservateion”);
query.setParameter(“cruise”.cruise);
具名原生查询
使用@javax.persistence.NamedNativeQuery注解来预定义具名原生SQL查询
@NamedNativeQuery(
name=”findCustAndCCNum”,
query=”select ……..”,//原生SQL
resultClass=”…”,//只返回一个实体时用
resultSetMapping=”….”
//一个声明的@SqlResultSetMapping,用于返回多个实体和或实体与标量混合的查询
)
等价XML
<entity-mappings>
<named-native-query name=” getAverageReservateion”
result-set-mapping=”….”>
<query>
原生SQL
</query>
</ named-native-query >
</entity-mappings >
使用方式
Query
query=em.createNamedQuery(“getAverageReservateion”);
query.setParameter(“cruise”.cruise);
分享到:
相关推荐
**OpenEJB 3.0 示例详解** OpenEJB 是一个开源的企业级 Java 应用服务器,它实现了 Java EE(以前称为 J2EE)规范,特别是 EJB(Enterprise JavaBeans)部分。OpenEJB 3.0 版本是该框架的一个里程碑,引入了许多...
OpenEjb提供了一个轻量级的EJB容器,可以在不牺牲性能的前提下,使Tomcat具备处理EJB的能力。 以下是如何使用OpenEjb在Tomcat中部署EJB的步骤: 1. **下载与安装OpenEjb**: 首先,你需要从OpenEjb的官方网站或...
标题中的"openejb-embedded-maven-plugin-4.6.0.1.zip"是一个开源项目的Maven插件包,特别地,它是OpenEJB的嵌入式版本。OpenEJB是一个开源的企业JavaBeans(EJB)容器和服务器,它实现了Java EE(现在称为Jakarta ...
标题 "openejb-loader-4.6.0.1.zip" 暗示这是一个与OpenEJB相关的软件组件,OpenEJB是Apache TomEE服务器的一部分,用于管理和部署Java Enterprise Edition (EE)应用。版本号4.6.0.1表明这是该组件的一个特定更新...
目前Tomcat并不直接支持EJB,但可借助openejb插件来间接能够支持EJB
一个简单的工具,可简化企业Java bean源代码和openEJB的配置的生成
标签:arquillian-openejb-transaction-provider-1.7.0.jar,arquillian,openejb,transaction,provider,1.7.0,jar包下载,依赖包
标签:arquillian-openejb-transaction-provider-1.5.1.jar,arquillian,openejb,transaction,provider,1.5.1,jar包下载,依赖包
标签:arquillian-openejb-embedded-4-4.5.2.jar,arquillian,openejb,embedded,4,4.5.2,jar包下载,依赖包
标签:arquillian-openejb-embedded-4-4.7.0.jar,arquillian,openejb,embedded,4,4.7.0,jar包下载,依赖包
标签:arquillian-openejb-embedded-4-4.5.0.jar,arquillian,openejb,embedded,4,4.5.0,jar包下载,依赖包
标签:arquillian-openejb-transaction-provider-1.7.1.jar,arquillian,openejb,transaction,provider,1.7.1,jar包下载,依赖包
标签:arquillian-openejb-embedded-4-4.6.0.jar,arquillian,openejb,embedded,4,4.6.0,jar包下载,依赖包
标签:arquillian-openejb-embedded-4-4.5.1.jar,arquillian,openejb,embedded,4,4.5.1,jar包下载,依赖包
标签:arquillian-openejb-transaction-provider-1.6.0.jar,arquillian,openejb,transaction,provider,1.6.0,jar包下载,依赖包
标签:arquillian-openejb-embedded-4-4.7.1.jar,arquillian,openejb,embedded,4,4.7.1,jar包下载,依赖包
标签:arquillian-openejb-transaction-provider-1.5.0.jar,arquillian,openejb,transaction,provider,1.5.0,jar包下载,依赖包
标签:arquillian-openejb-transaction-provider-1.5.2.jar,arquillian,openejb,transaction,provider,1.5.2,jar包下载,依赖包
标签:arquillian-openejb-embedded-4-4.7.0-sources.jar,arquillian,openejb,embedded,4,4.7.0,sources,jar包下载,依赖包
标签:arquillian-openejb-embedded-4-4.7.0-javadoc.jar,arquillian,openejb,embedded,4,4.7.0,javadoc,jar包下载,依赖包