JPA, метод hibernate find () возвращает null

с использованием Hibernate, JPA, Wildfly 11 и EJB, JTA. Моя база данных - это Mysql и внедрение entityManager с @PersistenceContext.

Я пытаюсь получить запись из базы данных, пока она существует в db, и ее тип в моем объекте - Long, а в db - BigInt (20).

entityManager.find(peristenceClass.class, 1L) 

возвращает null, в то время как тот же запрос с:

entityManager.createQuery(select a from Entity a where a.id = 1).getResultList() 

возвращает сущность.

После получения его методом createQuery (...) метод find () тоже его возвращает!

это определение моего класса сущности:

@Entity
@Table(name = "answersheet")
public class AnswerSheet implements DomainEntity {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "date", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date date;

    @Column(name = "name")
    private String name;

    @Column(name = "national_code")
    private String nationalCode;

    @Column(name = "mobile")
    private String mobile;

    @Column(name = "client_ip", nullable = false)
    private String clientIp;

    @Column(name = "satisfaction")
    private Integer satisfaction;

    @JoinColumn(name = "questionnaire", referencedColumnName = "id", nullable = false)
    @ManyToOne
    private Questionnaire questionnaire;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNationalCode() {
        return nationalCode;
    }

    public void setNationalCode(String nationalCode) {
        this.nationalCode = nationalCode;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getClientIp() {
        return clientIp;
    }

    public void setClientIp(String clientIp) {
        this.clientIp = clientIp;
    }

    public Integer getSatisfaction() {
        return satisfaction;
    }

    public void setSatisfaction(Integer satisfaction) {
        this.satisfaction = satisfaction;
    }

    public Questionnaire getQuestionnaire() {
        return questionnaire;
    }

    public void setQuestionnaire(Questionnaire questionnaire) {
        this.questionnaire = questionnaire;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof AnswerSheet)) return false;

        AnswerSheet that = (AnswerSheet) o;

        return getId() != null ? getId().equals(that.getId()) : that.getId() == null;

    }

    @Override
    public int hashCode() {
        return getId() != null ? getId().hashCode() : 0;
    }

    @Override
    public String toString() {
        return "AnswerSheet{" +
                "id = " + id +
                '}';
    }

Можете ли вы добавить свой класс entity-компонента к вопросу, включая все аннотации класса и те, которые указаны в объявлении первичного ключа?

Steve C 14.07.2018 03:07

@SteveC: да, чувак. Я обновил вопрос и добавил определение класса сущности.

Hamid Adldoost 14.07.2018 05:39

Можете ли вы изменить тип данных id на Integer и попробовать. И вы уверены, что передаете правильный класс сущности в своем методе поиска, потому что здесь я вижу разницу

codeLover 14.07.2018 05:40

@GarimaGupta: извините, я не могу изменить свой тип идентификатора, потому что это повлияет на очень много кодов проекта. также о передаче правильного объекта, да, я передаю правильный. различия здесь из-за краткости. Я добавил определение объекта после комментария Стива. Я упоминал, что я получаю правильный результат с помощью createQuery (...). GetResultList (), и после его вызова метод find () тоже исправляет это! Я предполагаю, что это проблема с кешем или что-то в этом роде из спящего режима.

Hamid Adldoost 14.07.2018 05:57

Я думаю, нам нужно увидеть весь код этого первоначального вызова find. Это фундаментальная операция JPA, и я был бы очень удивлен, если бы она не сработала, иначе было бы намного больше криков.

Steve C 14.07.2018 14:54

@HamidAdldoost: для работы entityManager.find (peristenceClass.class, 1L) класс / объект должен быть управляемым объектом этого менеджера объектов. Итак, если вы не покажете код, который вы используете для выполнения find () и createquery (), невозможно ответить, что идет не так.

Johnyzhub 05.10.2018 20:43

Может, какое-либо из полей случайно помечено как нулевое значение nullable = false? У меня была аналогичная проблема в прошлом, и это было причиной.

Kamil Bęben 29.05.2021 01:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
1 294
0

Другие вопросы по теме