【发布时间】:2019-10-29 18:07:07
【问题描述】:
我正在尝试将实体映射到现有表以用于只读目的。我使用的帐户只有 SELECT 权限。
我将@ID 映射到的列已填充。我的实体看起来像这样
@Entity
@Table(name = "MYTABLE", schema="MYSCHEMA")
public class PaymentsEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ssn", updatable = false, nullable = false)
private Long ssn;
@Column(name = "amount")
private BigDecimal amount;
@Column(name = "business_date")
private Date businessDate;
@Column(name = "receiver")
private String receiver;
@Column(name = "sender")
private String sender;
// getters and setters
}
我的仓库是这样的
@Repository
@Transactional
public interface PaymentsRepository extends JpaRepository<PaymentsEntity, BigInteger> {
@Query(value = "SELECT sender, receiver, amount, business_date FROM MYSCHEMA.MYTABLE WHERE business_date = ?1 ORDER BY Amount ASC",
nativeQuery = true)
public List<PaymentsEntity> findByBusinessDate(Date businessDate);
}
当我调用 findByBusinessDate 方法时,我收到以下错误
com.ibm.db2.jcc.am.SqlException: [jcc][10150][10300][4.19.49] Invalid parameter: Unknown column name ssn. ERRORCODE=-4460, SQLSTATE=null
如果我将 ssn 字段的类型更改为 BigInteger,则会收到以下错误
org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [ssn] in table [PFA.PAYMENTS]; found [bigint (Types#BIGINT)], but expecting [decimal(19,2) (Types#NUMERIC)]
因此,该列并不是真正未知的,我收到一条无用的错误消息。
我已尝试使用 useJDBC4ColumnNameAndLabelSemantics=2 连接参数,但它并没有改变任何东西。
我使用的是 Hibernate 5.4.6.FINAL,IBM DB2 驱动程序是 4.19.49 版本。 DB2 数据库是在 AIX 上运行的 10.5 版。
感谢所有帮助。
【问题讨论】: