返回列不等于null的行

时间:2017-11-14 10:36:35

标签: spring hibernate jpa spring-boot

我有一个有效的Spring Boot应用程序,我是JPA / Hibernate的新手,我正在尝试检索其中一个字段不包含空值的结果。现在我得到的所有东西都包括空值。

我不希望它为phone_number_id。我添加了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();
    }
}

2 个答案:

答案 0 :(得分:1)

这应该有效

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

你不需要NameQuery,你可以从PagingAndSortingRepository免费获得findAll

请参阅完整文档here

答案 1 :(得分:0)

在:

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

nullable = false指定数据库级别的非空约束。

如果您还想验证应用程序级别的内容,可以使用@NotNull注释(我也建议)。

通过这样做,您不允许在没有电话号码的情况下存在广告实体。但是,如果电话号码是可选的,请使用@Essex Boy提供的答案