Java 查询休眠实体时出错
我有两个Hibernate实体,如下所示,它们之间有关系,查询它们时遇到问题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
@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)