Я пытаюсь получить значение из базы данных postgres, используя функцию plpgsql
Примечание редактора: OP имел plsql
, но я не могу получить данные.
Я получаю следующее исключение:
Исключение в потоке "main" java.lang.UnsupportedOperationException: org.hibernate.dialect.PostgreSQLDialect не поддерживает наборы результатов с помощью хранимых процедур
Файл конфигурации моего гибернации:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.url">jdbc:postgresql://192.168.1.100:54321/localDB</property>
<!-- <property name="hibernate.connection.url">jdbc:postgresql://192.168.1.100:54321/scprj</property>-->
<property name="hibernate.connection.username">postgres</property>
<property name="hibernate.connection.password">dbserver</property>
<property name="hibernate.show_sql">true</property>
<mapping resource="hibernate.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Файл отображения моего гибернации:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="callFunctionPack.DateBean" table="userlogin">
<id column="userid" name="userid">
<generator class="increment"/>
</id>
<property column="username" name="username" type="string"/>
<property column="password" name="password" type="string"/>
</class>
<sql-query name="getlogin" callable="true" comment="Call the getlogindata procedure">>
<return class="callFunctionPack.DateBean">
<return-property name="username" column="username"/>
<return-property name="password" column="password"/>
</return>
{ call getlogin(:userid) }
</sql-query>
</hibernate-mapping>
Моя основная функция класса для процедуры:
public class Call {
public static void main(String... args) {
//select();
show();
}
public static void show() {
Query nQuery = getSession().getNamedQuery("getlogin").setParameter("userid", 1);
List results = nQuery.list();
for (Iterator it = results.iterator(); it.hasNext();) {
DateBean dateBean = (DateBean)it.next();
System.out.println(dateBean.getUsername());
System.out.println(dateBean.getPassword());
}
}
public static Session getSession() {
Session session = new Configuration().configure().buildSessionFactory().openSession();
return session;
}
}
Мой класс бинов:
public class DateBean {
private String date;
private int userid;
private String username;
private String password;
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
Моя функция plpgsql:
CREATE OR REPLACE FUNCTION getlogindata(numeric)
RETURNS refcursor AS
$BODY$
DECLARE
p_userid ALIAS FOR $1;
sql_stmt VARCHAR;
p_condition VARCHAR;
v_boolean BOOLEAN := false;
email_tracking_cursor REFCURSOR;
BEGIN
sql_stmt := 'SELECT USERNAME, PASSWORD FROM USERLOGIN WHERE USERID =' || p_userid;
raise notice '%',sql_stmt;
OPEN email_tracking_cursor FOR EXECUTE sql_stmt;
RETURN email_tracking_cursor;
END; $BODY$
LANGUAGE plpgsql VOLATILE;
ALTER FUNCTION getlogindata(numeric) OWNER TO postgres;