㈠ EtityManager调用存储过程报错
在EJB3 中你可以调用的存储过程有两种
1.无返回值的存储过程。
2.返回值为ResultSet(以select 形式返回的值)的存储过程(注意:EJB3不能调用以OUT参数返回值的存储过程。)
下面我们看看几种具有代表性的存储过程的调用方法.
调用无返回值的存储过程
首先创建一个名为AddPerson的存储过程,他的DDL 如下(注:本例使用的是MySql数据库):
CREATE PROCEDURE `AddPerson`()
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
㈡ 如何在JPA的po类中调用存储过程和函数
在项目开发中用到了JPA规范,并在po类中使用了存储过程,这种资料在网上很容易找到,所以很快就跑通了,代码如下:
@Entity
@Table(name = "USER", schema = "MOBILE", uniqueConstraints = {
@UniqueConstraint(columnNames = { "LOGINID" }),
@UniqueConstraint(columnNames = { "USERACCOUNT" }) })
@NamedNativeQuery(name = "addUser", query = "{call addUser(:pPortalID,:ploginid,:ploginpasswd,:pSelfQuiz,:pSelfAnswer,:pUserEmail,:pUserAccount,:pUserPin)}", hints = { @QueryHint(name = "org.hibernate.callable", value = "true") }, resultClass = User.class)
public class User implements java.io.Serializable {
private static final long serialVersionUID = 5325039036880950119L;
private String userid;
private String loginid;
private String passwd;
//省略若干代码
}
㈢ JPA执行存储过程需要在步骤上注明@Transactional吗
一般的增删改都要用@Transactional,只要你的方法里有这三类的操作就要加上这个注解,对于查就无所谓了
简单的理解就是需要修改数据库的操作你就加这个注解好了
㈣ 如何在JPA的po类中调用存储过程和函数
在项目开发中用到了JPA规范,并在po类中使用了存储过程,这种资料在网上很容易找到,所以很快就跑通了,代码如下:
@Entity
@Table(name = "USER", schema = "MOBILE", uniqueConstraints = {
@UniqueConstraint(columnNames = { "LOGINID" }),
@UniqueConstraint(columnNames = { "USERACCOUNT" }) })
@NamedNativeQuery(name = "addUser", query = "{call addUser(:pPortalID,:ploginid,:ploginpasswd,:pSelfQuiz,:pSelfAnswer,:pUserEmail,:pUserAccount,:pUserPin)}", hints = { @QueryHint(name = "org.hibernate.callable", value = "true") }, resultClass = User.class)
public class User implements java.io.Serializable {
private static final long serialVersionUID = 5325039036880950119L;
private String userid;
private String loginid;
private String passwd;
//省略若干代码
}
但是后来却要求将addUser改成了函数,所以也要将po类中的调用修改。起初我以为很简单,数据库中的存储过程和函数差不多,不用修改直接调用即可。但是事实却不像我想得那样,错误百出,我上网查了很多资料,但是没有能给出答案的,后来才知道只要修改一个地方就可以获得想要的功能,郁闷!
下面是修改后的代码:
@Entity
@Table(name = "USER", schema = "MOBILE", uniqueConstraints = {
@UniqueConstraint(columnNames = { "LOGINID" }),
@UniqueConstraint(columnNames = { "USERACCOUNT" }) })
@NamedNativeQuery(name = "addUser", query = "{?=call addUser(:pPortalID,:ploginid,:ploginpasswd,:pSelfQuiz,:pSelfAnswer,:pUserEmail,:pUserAccount,:pUserPin)}", hints = { @QueryHint(name = "org.hibernate.callable", value = "true") }, resultClass = User.class)
public class User implements java.io.Serializable {
private static final long serialVersionUID = 5325039036880950119L;
private String userid;
private String loginid;
private String passwd;
//省略若干代码
}
请注意call addUser语句,存储过程是直接调用,而调用函数则是在前面加?=.这可是我几天几夜不休得出的结果,拿出来与大家分享,希望有需要的朋友不要走我的弯路!
转载
㈤ JPA如果调用ORACLE中的函数,跟调用存储过程不一样哦,我把函数换成存储过程做了,以下是调用存储过程的
Oracle定义存储过程和函数主要是为了解决比较复杂的功能。是SQL语句的集合。
㈥ jpa调用mysql有多返回值存储过程详解
jpa调用mysql有多返回值存储过程详解
@Entity
@Table(name = "USER", schema = "MOBILE", uniqueConstraints = {
@UniqueConstraint(columnNames = { "LOGINID" }),
@UniqueConstraint(columnNames = { "USERACCOUNT" }) })
@NamedNativeQuery(name = "addUser", query = "{call addUser(:pPortalID,:ploginid,:ploginpasswd,:pSelfQuiz,:pSelfAnswer,:pUserEmail,:pUserAccount,:pUserPin)}", hints = { @QueryHint(name = "org.hibernate.callable", value = "true") }, resultClass = User.class)
public class User implements java.io.Serializable {
private static final long serialVersionUID = 5325039036880950119L;
private String userid;
private String loginid;
private String passwd;
//省略若干代码
}
㈦ java,怎么根据实体类和注解生成基础的增删改查的存储过程
使用Mybatis,这个是最简单的,配置完毕后直接在你的方法上面加Query注解
这个更简单,使用Jpa,一个叫JpaRepository的类你可以关注一下,继承了这个类以
后甚至不用写方法和实现类,空着就行,这个类里面封装好了基本的crud,而如果想复杂
点可以参考一下这个类的文档,方法名根据他们的规范来写,同样不需要实现类,再复杂
点的就直接加上Query注解就行啦
㈧ JPA如何调用ORACLE的存储过程
1、springboot依赖jpa
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2、存储过程栗子如下
Procere policy_no(a tb_bams_define.card_type_code%Type,
b Out tb_bms_detail.card_no%Type);
3、先创建一个entity
@Entity
@Table(name="Policy_table")
@NamedStoredProcereQuery(name="policy_no", procereName = "policy_no",parameters= {
@StoredProcereParameter(mode=ParameterMode.IN, type=String.class, name="a"),
@StoredProcereParameter(mode=ParameterMode.OUT, type=String.class, name="b")
})
public class PolicyTable {}
a和b是存储过程中的入参和出参。存储过程的名字保持一致。
4、层
public interface PolicyDao extends CrudRepository<PolicyTable, Long>{
@Procere(name="policy_no")
String createPolicy(@Param("a")String str);
}
5、调用简单
@Autowired
private PolicyDao policyDao;
note:最主要就是各种名称保存一致。
㈨ JPA怎么调用ORACLE的存储过程
虽然在数据库的控制台上运行SQL和调用存储过程的方法是一样的,但是某些JDBC驱动程序里是运行SQL和调用存储过程的实现方法是不一样的,所以如果要调用存储过程的话还是用CallableStatement比较好。
㈩ jpa访问数据库的存储过程怎么写
@Entity
@Table(name = "USER", schema = "MOBILE", uniqueConstraints = {
@UniqueConstraint(columnNames = { "LOGINID" }),
@UniqueConstraint(columnNames = { "USERACCOUNT" }) })
@NamedNativeQuery(name = "addUser", query = "{call addUser(:pPortalID,:ploginid,:ploginpasswd,:pSelfQuiz,:pSelfAnswer,:pUserEmail,:pUserAccount,:pUserPin)}", hints = { @QueryHint(name = "org.hibernate.callable", value = "true") }, resultClass = User.class)
public class User implements java.io.Serializable {