Java プログラミングでいくつか問題があります。私の場合、getHibernateTemplate
セッション オブジェクトに直接アクセスせずに、Spring を介して 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
無名クラス内の from の値を検査できないことがわかります。どうしたの?これを修正するにはどうすればよいですか?
[編集] これが Pojo です。私は親を制御できません(ソースでさえありません。自動逆コンパイルのために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;
}