Я наткнулся на очень странное поведение с JPA Eclipselink и PostgreSQL.JPA Eclipselink PostgreSQL Поле запроса для значений Null
create table test(id bigint, name varchar(255))
insert into test values(1, "hello")
insert into test values(2, null)
Java EE Entity Bean:
@Entity
@Table(name = "test")
public class Test implements Serializable {
@Id
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
Stateless Фасоль с простым JPA Query:
TypedQuery<Test> q = em.createQuery("select t from Test t where t.name = :name", Test.class);
q.setParameter("name", null);
List<Test> list = q.getResultList();
for (Test t : list) {
System.out.println(t.getId() + " " + t.getName());
}
Результат:
аспектировано: Ряд с идентификатором = 2 с нулем в названии поле Текущее поведение: не возвращено ни одной строки
Когда я использую «null» вместо примера выше в JPA Query. Тогда я что-то верну.
Что делает JPA?
select * from test where t.name = null
если это не будет таким же, как
select * from test where t.name is null
Ваш запрос содержит 't.name =: name', так что это то, что отправлено в базу данных –
Тогда для postgresql" null "и" = null "это не одно и то же? –
Нет, это не так. Вы не можете сравнивать 'NULL' с' = 'в SQL (так определяется SQL) https://www.postgresql.org/docs/9.5/static/functions-comparison.html –