JPA/Hibernate:必须声明标识符 'XXTE_LOADER.ADD_LINE'(但程序在 oracleclient 中运行良好)
JPA/Hibernate: Identifier 'XXTE_LOADER.ADD_LINE' must be declared (but procedure working fine in oracleclient)
我创建了以下实体:
@Entity
@NamedStoredProcedureQuery(name = "createLine", procedureName = "XXTE_LOADER.ADD_LINE", resultClasses = {Contracts.class}, parameters = {
@StoredProcedureParameter(name = "P_User_Name", mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(name = "P_Contract_Number", mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(name = "P_Counter_Group_Name", mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(name = "P_Contract_Id", mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(name = "P_Override_Inv_Text", mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(name = "P_Invoice_Text", mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(name = "p_start_date", mode = ParameterMode.IN, type = java.sql.Date.class),
@StoredProcedureParameter(name = "p_end_date", mode = ParameterMode.IN, type = java.sql.Date.class),
@StoredProcedureParameter(name = "p_project_number", mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(name = "p_task_number", mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(name = "x_error_code", mode = ParameterMode.OUT, type = String.class),
@StoredProcedureParameter(name = "x_error_text", mode = ParameterMode.OUT, type = String.class)
})
@Data
public class Contracts implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private String contractId;
}
如下所示:
StoredProcedureQuery query = entityManagerTerp.createNamedStoredProcedureQuery("createLine");
query.setParameter("P_User_Name", "ANONYMOUS");
query.setParameter("P_Contract_Number", tscMessage.getContractNumber());
query.setParameter("P_Counter_Group_Name", tscMessage.getCounterGroupName());
query.setParameter("P_Contract_Id", tscMessage.getContractId());
query.setParameter("P_Override_Inv_Text", tscMessage.getOverrideInvoiceText());
query.setParameter("P_Invoice_Text", tscMessage.getInvoiceText());
query.setParameter("p_start_date", new java.sql.Date(tscMessage.getStartDate().toGregorianCalendar().getTimeInMillis()));
query.setParameter("p_end_date", tscMessage.getEndDate() != null ?new java.sql.Date(tscMessage.getEndDate().toGregorianCalendar().getTimeInMillis()) : null);
query.setParameter("p_project_number", tscMessage.getProjectNumber());
query.setParameter("p_task_number", tscMessage.getTaskNumber());
query.execute();
String status = (String) query.getOutputParameterValue("x_error_code");
String errorMsg = (String) query.getOutputParameterValue("x_error_text");
但是当 运行 它会抛出以下内容:
2021-06-29 12:05:14,845 INFO [stdout] (default task-15) Hibernate: {call XXTE_LOADER.ADD_LINE(?,?,?,?,?,?,?,?,?,?,?,?)}
2021-06-29 12:05:14,894 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-15) SQL Error: 6550, SQLState: 65000
2021-06-29 12:05:14,894 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-15) ORA-06550: line 1, column 7:
PLS-00201: identifier 'XXTE_LOADER.ADD_LINE' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
但是当我在oracle客户端直接使用同一个oracle用户执行程序时,它执行成功了。
似乎是代码问题,但我不明白这是什么问题?未正确提及架构或任何其他参数?
我认为这是一个可见性问题,但我不是 Oracle 专家。可能搜索路径不同或类似。
我创建了以下实体:
@Entity
@NamedStoredProcedureQuery(name = "createLine", procedureName = "XXTE_LOADER.ADD_LINE", resultClasses = {Contracts.class}, parameters = {
@StoredProcedureParameter(name = "P_User_Name", mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(name = "P_Contract_Number", mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(name = "P_Counter_Group_Name", mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(name = "P_Contract_Id", mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(name = "P_Override_Inv_Text", mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(name = "P_Invoice_Text", mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(name = "p_start_date", mode = ParameterMode.IN, type = java.sql.Date.class),
@StoredProcedureParameter(name = "p_end_date", mode = ParameterMode.IN, type = java.sql.Date.class),
@StoredProcedureParameter(name = "p_project_number", mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(name = "p_task_number", mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(name = "x_error_code", mode = ParameterMode.OUT, type = String.class),
@StoredProcedureParameter(name = "x_error_text", mode = ParameterMode.OUT, type = String.class)
})
@Data
public class Contracts implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private String contractId;
}
如下所示:
StoredProcedureQuery query = entityManagerTerp.createNamedStoredProcedureQuery("createLine");
query.setParameter("P_User_Name", "ANONYMOUS");
query.setParameter("P_Contract_Number", tscMessage.getContractNumber());
query.setParameter("P_Counter_Group_Name", tscMessage.getCounterGroupName());
query.setParameter("P_Contract_Id", tscMessage.getContractId());
query.setParameter("P_Override_Inv_Text", tscMessage.getOverrideInvoiceText());
query.setParameter("P_Invoice_Text", tscMessage.getInvoiceText());
query.setParameter("p_start_date", new java.sql.Date(tscMessage.getStartDate().toGregorianCalendar().getTimeInMillis()));
query.setParameter("p_end_date", tscMessage.getEndDate() != null ?new java.sql.Date(tscMessage.getEndDate().toGregorianCalendar().getTimeInMillis()) : null);
query.setParameter("p_project_number", tscMessage.getProjectNumber());
query.setParameter("p_task_number", tscMessage.getTaskNumber());
query.execute();
String status = (String) query.getOutputParameterValue("x_error_code");
String errorMsg = (String) query.getOutputParameterValue("x_error_text");
但是当 运行 它会抛出以下内容:
2021-06-29 12:05:14,845 INFO [stdout] (default task-15) Hibernate: {call XXTE_LOADER.ADD_LINE(?,?,?,?,?,?,?,?,?,?,?,?)}
2021-06-29 12:05:14,894 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-15) SQL Error: 6550, SQLState: 65000
2021-06-29 12:05:14,894 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-15) ORA-06550: line 1, column 7:
PLS-00201: identifier 'XXTE_LOADER.ADD_LINE' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
但是当我在oracle客户端直接使用同一个oracle用户执行程序时,它执行成功了。
似乎是代码问题,但我不明白这是什么问题?未正确提及架构或任何其他参数?
我认为这是一个可见性问题,但我不是 Oracle 专家。可能搜索路径不同或类似。