㈠ 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 {