小编Sco*_*nes的帖子

Hibernate和意外的Subtree异常结束

我是Hibernate的新手.

我有一个Item包含Set<String>标签的POJO .标签包含在表中的另一个Database表Item中,因此我进行了连接以填充pojo.

我正在尝试从我查询的"Java Persistance with Hibernate"一书中运行一个简单的示例查询from Item item where 'hello' member of item.labels.只是,由于某种原因,我得到了一个

 `org.hibernate.hql.ast.QuerySyntaxException: unexpected end of subtree[from /*qualified class path*/.Item item where 'hello' member of item.labels]`
Run Code Online (Sandbox Code Playgroud)

可能导致此问题的原因是什么?

这是我的POJO:

public class Item
       private int uuid;
       private Set<String>labels = new HashSet<String>();

       @Id
       public int getUuid(){
          return uuid; 
       }

       @CollectionOfElements
       @JoinTable(name="labels", joinColumns=@JoinColumn(name="uuid"))
       @Column(name="label")
       public Set<String> getLabels(){
            return labels;
       }
 }
Run Code Online (Sandbox Code Playgroud)

java hibernate hql

22
推荐指数
2
解决办法
5万
查看次数

hash.POSITIVE_INFINITY的hashCode

我最近在java中计算双元组的哈希码时遇到了一个奇怪的情况.假设您有两个元组(1.0,1.0)和(Double.POSITIVE_INFINITY,Double.POSITIVE_INFINITY).使用Joshua Bloch的Effective Java(第7项)中所述的习语,这两个元组不会被认为是相等的(想象一下这些元组是对象).但是,使用第8项中所述的公式计算hashCode()每个元组的计算结果为相同的值.

所以我的问题是:当我编写公式时,我错过了这个公式有什么奇怪的,或者只是一个奇怪的哈希码碰撞案例?

这是我的简短比较方法来说明情况(我把它写成JUnit4测试,但它应该很容易转换为main方法).

@Test
public void testDoubleHashCodeAndInfinity(){
    double a = 1.0;
    double b = 1.0;
    double c = Double.POSITIVE_INFINITY;
    double d = Double.POSITIVE_INFINITY;

    int prime = 31;
    int result1 = 17;
    int result2 = 17;

    long temp1 = Double.doubleToLongBits(a);
    long temp2 = Double.doubleToLongBits(c);
    //this assertion passes successfully
    assertTrue("Double.doubleToLongBits(Double.POSITIVE_INFINITY" +
            "==Double.doubleToLongBits(1.0)",temp1!=temp2);

    result1 = prime*result1 + (int)(temp1^(temp1>>>32));
    result2 = prime*result2 + (int)(temp2^(temp2>>>32));

    //this assertion passes successfully 
    assertTrue("Double.POSITIVE_INFINITY.hashCode()" +
            "==(1.0).hashCode()",result1!=result2);

    temp1 = Double.doubleToLongBits(b);
    temp2 = …
Run Code Online (Sandbox Code Playgroud)

java hashcode

2
推荐指数
1
解决办法
1232
查看次数

标签 统计

java ×2

hashcode ×1

hibernate ×1

hql ×1