我有一个有效的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();
}
}
答案 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提供的答案