Hibernate / DB2 получает неизвестную ошибку столбца 4460 - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь сопоставить сущность с существующей таблицей только для чтения. Учетная запись, которую я использую, имеет только привилегии 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)]

Итак, столбец на самом деле не известен, и я получаю бесполезное сообщение об ошибке.

IЯ пытался использовать параметр соединения useJDBC4ColumnNameAndLabelSemantics = 2, но он ничего не меняет.

Я использую Hibernate 5.4.6.FINAL, а драйвер IBM DB2 версии 4.19.49. База данных DB2 - это версия 10.5, работающая в AIX.

Любая и вся помощь приветствуется.

1 Ответ

1 голос
/ 29 октября 2019

Я думаю, что первое исключение, которое вы получите, связано с отсутствием ssn в вашей проекции sql. Правильный запрос должен быть SELECT ssn, sender, receiver, amount, business_date... Причина второго исключения выглядит совсем иначе. Вероятно, для GenerationType.IDENTITY требуется, чтобы тип свойства был Long.

...