Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate,其中不适用于带有null成员的@Embedded_Java_Spring_Hibernate - Fatal编程技术网

Java Hibernate,其中不适用于带有null成员的@Embedded

Java Hibernate,其中不适用于带有null成员的@Embedded,java,spring,hibernate,Java,Spring,Hibernate,我有一个类发布,带有一个@嵌入式: public class Posting { @Embedded private BankDetails bankDetails; } public class BankDetails { private String bankCode; private String bankName; } 现在我想列出所有过账bankCode为123和bankName为null的 Query q = entityManager.cre

我有一个类
发布
,带有一个
@嵌入式

public class Posting {
  @Embedded
  private BankDetails bankDetails;      
}

public class BankDetails {
    private String bankCode;
    private String bankName;
}
现在我想列出所有
过账
bankCode
123
bankName
null

Query q = entityManager.createQuery("SELECT o from Posting o WHERE bankDetails=?");
q.setParameter(1, new BankDetails("123", null));
但是我没有得到任何结果

为什么?

以下是Hibernate执行的sql查询:

select posting0_.bank_code as bank_cod6_42_, posting0_.bank_name as bank_nam7_42_
from posting posting0_ 
where (posting0_.bank_code, posting0_.bank_name)=('123', null)
(顺便说一句,这种括号语法称为行值构造函数。)

这显然不起作用,因为is将
null
=
进行比较

  • 这是虫子吗?如果是,哪个组件生成SQL语句?(Hibernate?mysql连接器?)
  • 有什么解决办法吗

  • 环境:Win10上的MySQL Server 5.7、Spring 4.0.3、Hibernate 4.3.11、MySQL connector 5.1.30是的,有一个解决方法,但它要求您对查询更加详细

    entityManager.createQuery( "SELECT o FROM Posting o WHERE " +
        " o.bankDetails.bankCode = ? " +
        " AND o.bankDetails.bankName IS NULL" );
    entityManager.setParameter( 1, "123" );
    

    老实说,我还没有见过使用这样的元组值生成的查询,但我过去的大部分经验都是使用不支持这种语法的SQL Server。如果您认为这是一个bug,请随时打开一个问题。

    这是Hibernate 4和5中的一个bug

    它应该在Hibernate 6中修复:


    请参阅@Naros answer以了解解决方法。

    在SQL Server中,语法可能是('123',null)
    中的
    where(posting0.bank\u代码,posting0.bank\u名称)
    但我无法验证。我无法对MSSQLSQL2012+发表评论,但我知道MSSQLSQL2008及之前版本的语法无效。