Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 查询休眠实体时出错_Java_Hibernate_Exception - Fatal编程技术网

Java 查询休眠实体时出错

Java 查询休眠实体时出错,java,hibernate,exception,Java,Hibernate,Exception,我有两个Hibernate实体,如下所示,它们之间有关系,查询它们时遇到问题 @Entity @Table(name="tdbs", catalog="dbcreator") public class DB extends DBEntity { @Id @Column(name="id", unique=true, nullable=false) @GenericGenerator(name="gen",strategy="increment") @Genera

我有两个Hibernate实体,如下所示,它们之间有关系,查询它们时遇到问题

@Entity
@Table(name="tdbs", catalog="dbcreator")
public class DB extends DBEntity {

    @Id
    @Column(name="id", unique=true, nullable=false)
    @GenericGenerator(name="gen",strategy="increment")
    @GeneratedValue(generator="gen")
    private Integer id;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="usr", referencedColumnName="usr", nullable=false)
    private User user;


@Entity
@Table(name="tusers",catalog="dbcreator", uniqueConstraints = @UniqueConstraint(columnNames="email"))
@XmlRootElement(name = "User")
public class User extends DBEntity {

    @Id 
    @Column(name="usr", unique=true, nullable=false, length=30)
    private String usr;
我想查询的是获取链接到特定用户的DB实体列表(“user”变量包含实际用户名)。我使用以下查询:

List<DB> list = sessionFactory.getCurrentSession().createQuery(
                "from DB p where p.user=:usrId").setString("usrId", user).list();

这应如下:

sessionFactory.getCurrentSession().
createQuery("from DB p where p.user.usr=:usrId").setParameter("usrId", user)
旁注

一致且有意义的命名将提高可读性。我个人的选择是:

sessionFactory.getCurrentSession().
createQuery("from DB db where db.user.usr=:usr").setParameter("usr", userString)

也许
User.usr
成员变量应该被称为
User.id
User.name
,这取决于它实际代表的是什么。

什么类型的
User
?您应该使用
setParameter
而不是
setString
,还必须正确覆盖
equals
hashCode
用户实际上是字符串类型。因为用户表的ID列是string,所以它可以是string吗?我是否需要在那里放置实体类型(即用户)?因为我想我试过了,结果也出现了同样的错误。如果你输入一个字符串,那么你应该输入
p.user.name
,而不是
p.user
sessionFactory.getCurrentSession().
createQuery("from DB db where db.user.usr=:usr").setParameter("usr", userString)