@Query("SELECT p FROM PostDAO p WHERE true OR p.user.institution IS NOT NULL")
这个条件应该等于
@Query("SELECT p FROM PostDAO p WHERE true")
输出也应该相同,但空检查会删除机构为空的所有行。
所以第二个查询应该返回所有帖子并且工作正常,第一个查询应该做同样的事情,但是它删除了机构为空的所有帖子。
也许我搞错了什么?帮助我。
尝试使用“p.user.institution <> null”检查 null 或检查 id“p.user.institution.id = 1” 所以事情是这样的:
SELECT p FROM PostDAO p WHERE true OR p.user.institution <> null
和
SELECT p FROM PostDAO p WHERE true OR p.user.institution.id = 1
但是每个带有机构 = null 的帖子都已从结果中删除。
PostDAO:
@Entity
@Table(name = "posts")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class PostDAO {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "date", nullable = false)
private Date date;
@Column(name = "expiration_date")
private Date expirationDate;
@Column(name = "text", columnDefinition = "TEXT")
private String text;
@ManyToOne
@JoinColumn(name="user_id", nullable=false)
private UserDAO user;
用户DAO:
@Data
@Entity
@Table(name = "users", uniqueConstraints = {
@UniqueConstraint(columnNames = {"login"})
})
public class UserDAO {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "login")
private String login;
@Column(name = "password")
private String password;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "user")
private CompanyDAO company;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "user")
private InstitutionDAO institution;
@ManyToMany
@JoinTable(
name = "users_roles",
joinColumns = @JoinColumn(
name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(
name = "role_id", referencedColumnName = "id"))
private Set<RoleDAO> roles;
}
看起来这里的问题是“where true”无效,而应该是:
“其中 true = true 或 p.user.institution IS NOT NULL”
这应该可以解决您的问题。
我认为“where true”实际上并未被处理,因此您只是返回查询的所有结果