我在Java编程方面遇到了一些麻烦。就我而言,我通过Spring的getHibernateTemplate
使用Hibernate条件查询而无法直接访问会话对象。
我有一个使用JPA注释映射的父子关系。这是我的DAO方法
public List<Child> findByParent(final Parent parent)
{
return getHibernateTemplate().executeFind(new HibernateCallback<List<Child>>()
{
@Override
public List<Child> doInHibernate(Session session) throws HibernateException, SQLException
{
return session.createCriteria(Child.class)
.add(Restrictions.eq("parent", parent))
.list();
}
});
}
我已将parent
标记为最终版,因为我已将其传递给匿名类。当我运行代码时,Hibernate会执行查询(... where parentId = ?
),但我没有得到任何结果。在mysql中使用正确的parentId
运行它会返回结果。
调试时,我发现Eclipse无法从匿名类中检查parent
的值。怎么了?我该如何解决这个问题?
[edit]这是Pojo。我无法控制Parent(甚至不是源代码,我只是按F3进行自动反编译)
@Entity
@SequenceGenerator(name = "SEQ_STORE", sequenceName = "SEQ_CHILD")
@Table(name = "TA_CHILD", uniqueConstraints = { @UniqueConstraint(columnNames = { "A_FIELD", "PARENT_ID" }) })
public class Immobile
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "CHILD_ID")
protected int id;
@JoinColumn(name = "PARENT_ID")
@ManyToOne(fetch = FetchType.LAZY, optional = false, targetEntity = Organization.class)
protected Parent parent;
@GeneratedValue
@Column(name = "PARENT_ID", insertable = false, updatable = false)
protected String parentId;
}
// Compiled from Parent.java (version 1.6 : 50.0, super bit)
@javax.persistence.Entity
@javax.persistence.Table(name="TA_PARENT")
public class org.Partent extends org.ExtensibleBase implements java.io.Serializable {
// Field descriptor #161 J
private static final long serialVersionUID = 1L;
// Field descriptor #166 Ljava/lang/String;
@javax.persistence.Id
@javax.persistence.Column(name="PARENT_ID",
nullable=false,
length=(int) 20)
private java.lang.String id;
}
答案 0 :(得分:0)
在限制中,您必须为父实体的ID添加条件 试试以下代码,
public List<Child> findByParent(final Parent parent)
{
return getHibernateTemplate().executeFind(new HibernateCallback<List<Child>>()
{
@Override
public List<Child> doInHibernate(Session session) throws HibernateException, SQLException
{
return session.createCriteria(Child.class)
.add(Restrictions.eq("parent.id", parent.getId()))
.list();
}
});
}
答案 1 :(得分:0)
代码中没有问题。简单地说,在从MySQL工作台填充表后,我忘记提交事务或启用自动提交。
两个片段(我和Pritesh)都是正确的,并返回所有结果。
问题已解决,但这并不能解释Eclipse无法评估parent
变量,这超出了范围