Пользовательский столбец базовой сущности

#java #spring #jpa #entity #base

#java #spring #jpa #сущность #основание

Вопрос:

у меня есть базовая сущность, подобная

     @MappedSuperclass
    public class BaseEntityCore implements Serializable {
    
        @CreatedBy
        @Column(name = "olusturan", /* nullable = false, */ length = 50, updatable = false)
        private String createdBy;
    
        @CreatedDate
        //@NotNull
        @Column(name = "olusturma_tarihi", nullable = false, updatable = false)
        private LocalDateTime createdDate ;
    
        @LastModifiedBy
        @Column(name = "guncelleyen", length = 50)
        private String lastModifiedBy;
    
        @LastModifiedDate
        @Column(name = "guncelleme_tarihi")
        private LocalDateTime lastModifiedDate;
    
        @Column(name = "aktif")
        private int aktif;

// getter and setter
  

и сущность расширяет эту базовую сущность, например

 @Entity
@Table(name = "foo")
@EntityListeners(value = { AbstractEntityListenerCore.class })
public class foo extends BaseEntityCore {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name="foo_name")
private String fooName;
//getter and setter
}
  

с spring, spring jpa. у меня также есть репозиторий сущностей, подобный

 public interface FooRepository extends JpaRepository<Foo, Long> {
Optional<Foo> findByFooName(String name);
}
  

теперь я могу сохранить сущность с помощью foo.setAktif(1). после сохранения foo я вижу, что в таблице aktif равно 1. После этого я запускаю метод findByFooName. это превращает объект, но у этого объекта есть 2 свойства aktif. первый — это aktif и значение равно 1, а другой — BaseEntityCore.aktif и значение равно 0. я проверяю с помощью предложения if, подобного

 if(foo.getAktif()==1){
//do something
}
else {
//throws exception;
}
  

я не могу понять, почему всегда возникает исключение.

Ответ №1:

Вам не нужно ваше предложение if else. Просто всегда ищите объекты с «Aktif» == 1.

Итак, расширьте свой класс репозитория другим методом

 Optional<Foo> findByFooNameAndAktif(String name, int aktif);   
  

и ищите только «aktif», который вы хотите.

Но ваш вопрос касается 2 свойств «Aktif», верно?

Комментарии:

1. на самом деле я могу изменить метод repo и добавить andAktif, но проблема в 2 одинаковых свойствах. также getAktif() возвращает 0, а не 1. почему? как я могу выбрать правильный?