2017-11-14 6 views
0

私は、動作しているSpringブートアプリケーションを持っています。私はJPA/Hibernateを初めて使用していますが、null値を含まないフィールドのいずれかを持つ結果を取得しようとしています。今、私はnullを含むすべてを取得しています。カラムがnullでない行を返す

phone_number_id私はそれをnullにしたくありません。私はnullable=falseを追加しましたが、検索には何の効果もないようです。

私はphone_number_id

マイモデル

@Entity 
@NamedQuery(name="Ad.findAll", query="SELECT a FROM Ad a") 
public class Ad implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    private Long id; 

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

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

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

    private Integer age; 

    @Column(name="post_id") 
    private Long postId; 

    //bi-directional many-to-one association to City 
    @ManyToOne 
    private City city; 

    //bi-directional many-to-one association to PhoneNumber 
    @ManyToOne 
    @JoinColumn(name="phone_number_id", nullable=false) 
    private PhoneNumber phoneNumber; 

    //bi-directional many-to-one association to AdPhoto 
    @OneToMany(mappedBy="ad") 
    private List<AdPhoto> adPhotos; 

    public Ad() { 
    } 

    public Long getId() { 
     return this.id; 
    } 

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

    public String getAdContent() { 
     return this.adContent; 
    } 

    public void setAdContent(String adContent) { 
     this.adContent = adContent; 
    } 

    public String getAdTitle() { 
     return this.adTitle; 
    } 

    public void setAdTitle(String adTitle) { 
     this.adTitle = adTitle; 
    } 

    public String getAdUrl() { 
     return this.adUrl; 
    } 

    public void setAdUrl(String adUrl) { 
     this.adUrl = adUrl; 
    } 

    public Integer getAge() { 
     return this.age; 
    } 

    public void setAge(Integer age) { 
     this.age = age; 
    } 

    public Long getPostId() { 
     return this.postId; 
    } 

    public void setPostId(Long postId) { 
     this.postId = postId; 
    } 

    public City getCity() { 
     return this.city; 
    } 

    public void setCity(City city) { 
     this.city = city; 
    } 

    public PhoneNumber getPhoneNumber() { 
     return this.phoneNumber; 
    } 

    public void setPhoneNumber(PhoneNumber phoneNumber) { 
     this.phoneNumber = phoneNumber; 
    } 

    public List<AdPhoto> getAdPhotos() { 
     return this.adPhotos; 
    } 

    public void setAdPhotos(List<AdPhoto> adPhotos) { 
     this.adPhotos = adPhotos; 
    } 

    public AdPhoto addAdPhoto(AdPhoto adPhoto) { 
     getAdPhotos().add(adPhoto); 
     adPhoto.setAd(this); 

     return adPhoto; 
    } 

    public AdPhoto removeAdPhoto(AdPhoto adPhoto) { 
     getAdPhotos().remove(adPhoto); 
     adPhoto.setAd(null); 

     return adPhoto; 
    } 

マイリポジトリ

@Repository 
public interface AdRepository extends PagingAndSortingRepository<Ad, Long> { 

} 

と私のサービスクラス

のヌル出現を持っていない列のみを取得するために行うには何が必要です
@Service 
public class AdService { 
    private final static int PAGESIZE = 3; 

    @Autowired 
    AdRepository adRepository; 

    public Iterable<Ad> findAllAds() { 
     return adRepository.findAll(); 
    } 

    public List<Ad> getPage(int pageNumber) { 
     PageRequest request = new PageRequest(pageNumber - 1, PAGESIZE, Sort.Direction.ASC, "id"); 

     return adRepository.findAll(request).getContent(); 
    } 
} 

答えて

1

これは、あなたが

は完全なマニュアルを参照してくださいPagingAndSortingRepository

から無料のfindAllを取得NameQueryを必要としない

@Repository 
public interface AdRepository extends PagingAndSortingRepository<Ad, Long> { 
    List<Ad> findByPhoneNumberIsNull(); 
} 

動作するはずでhere

+0

リスト findByPhoneNumberIsNotNull(PageRequest request); 'nullではないので、私はそれを渡しています。Pag​​eRequest request 'AdServiceクラスから? – Arya

+0

@Aryaはい、またはコース、よく発見された:) –

0

@ManyToOne 
@JoinColumn(name="phone_number_id", nullable=false) 
private PhoneNumber phoneNumber; 

nullable = falseは、DBレベルで非NULL制約を指定します。

アプリケーションレベルのコンテンツの有効性を確認する場合は、@NotNull注釈(私もお勧めします)を使用してください。

これを行うと、電話番号なしで広告エンティティが存在することは許可されません。しかし、電話番号がオプションの場合は、@Essex Boyが提供する答えを使用してください。

関連する問題