Для объекта, полученного с использованием findById, все поля установлены в NULL - PullRequest
0 голосов
/ 12 марта 2020

Для объекта, полученного с помощью Hibernate, все поля имеют значение NULL. Как я могу избежать этого? Это мой репозиторий Jpa.

@Repository
public interface PolicyRepository extends JpaRepository<Entity, Long>{
    Entity findByEntSeqNo(@Param("entSeqNo") long entSeqNo);
}

При отладке я вижу, что извлеченные данные находятся внутри имени поля $$_hibernate_interceptor

Это мой класс сущностей

@Entity
@Table(name = "ENTITY_TABLE")
@Lazy(value = false)
public class Entity extends AuditModel {

    @Id
    @Column(name = "ENT_SEQ_NO")
    @GeneratedValue(generator="entitySeq")
    @SequenceGenerator(name="entitySeq",sequenceName="\"ENT_SEQ_NO_seq\"", allocationSize=1)
    private long entSeqNo;

    @Column(name = "ENT_CUSTOMER_CODE")
    @NotEmpty(message = "Customer Code is Required.")
    private String entCustomerCode;

    @Column(name = "ENT_CLAS_CODE")
    @NotEmpty(message = "Class Code is Required.")
    private String polcClasCode;

    @Column(name = "ENT_PROD_CODE")
    @NotEmpty(message = "Product Code is Required.")
    private String entProdCode;

    @Column(name = "ENT_BRANCH_CODE")
    @NotEmpty(message = "Branch Code is Required.")
    private String entBranchCode;

    @Column(name = "ENT_YYY_NO")
    @NotEmpty(message = "Yyy Number is Required.")
    private String entYyylNo;

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

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

    @Column(name = "ENT_COMMENCEMENT_DATE")
    @Temporal(TemporalType.TIMESTAMP)
    private Date entCommencementDate;

    @Version
    @NotNull(message = "Version is Required.")
    @Column(name = "VERSION")
    private int version;

    @Column(name = "ENT_EXPIRY_DATE")
    @NotNull(message = "Entity Expiry Date is Required.")
    @Temporal(TemporalType.TIMESTAMP)
    private Date entExpiryDate;

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

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

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

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

    @Column(name = "ENT_COLLECTED_DATE")
    @Temporal(TemporalType.TIMESTAMP)
    private Date entCollectedDate;

    @Column(name = "ENT_POSTED_DATE")
    @Temporal(TemporalType.TIMESTAMP)
    private Date entPostedDate;

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

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

    @Column(name = "ENT_PP1_ID", insertable = false, updatable = false)
    private Long entPp1Id;

    @Column(name = "ENT_STATUS")
    private Short entStatus;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ENT_PP1_ID", referencedColumnName = "ID")
    private Pp1 entPp1;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ENT_EPP1_ID", referencedColumnName = "ID")
    private Epp1 entEpp1;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "xxx")
    private Collection<TaskLog> taskLogColletion;
}

Я спрашиваю это здесь, так как я не смог найти точную причину такого поведения. Все операции Jpa работают нормально, и это происходит только тогда, когда я пытаюсь выбрать детали из базы данных. Я также попробовал метод getOne, и такая же проблема возникает.

1 Ответ

0 голосов
/ 12 марта 2020

Вам не нужен метод: Entity findByEntSeqNo(@Param("entSeqNo") long entSeqNo); в вашем интерфейсе jpa, потому что entSeqNo - это идентификатор вашей сущности. Поэтому, когда вы хотите получить одну сущность по идентификатору, вы можете просто позвонить policyRepository.getOne(the value of entSeqNo), предоставленной JpaRepository

, или вы можете использовать policyRepository.findById(the value of entSeqNo), предоставленную CrudRepository , что является в основном суперинтерфейс JpaRepository

Ps: не перезаписывайте эти методы в вашем интерфейсе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...