我是 iBatis 的新手。在我的项目中,我们使用 iBatis 将 Java 对象持久保存在 Oracle DB 中。我有一个类 ClassA,它有 3 列:id、name 和 description。数据将保存在 TableA 中。DB 中有一个序列可以为该表中的 id 列生成值。我们将插入语句写入该表,如下所示,
<insert id="insertTableA" parameterClass="com.ClassA">
<selectKey resultClass="java.lang.Long" keyProperty="id">
SELECT seq_TableA.nextval as id FROM dual
</selectKey>
INSERT INTO TableA(ID, NAME, DESCRIPTION) VALUES (#id#, #name#, #description#)
</insert>
这工作得很好。
但由于我们内部 UI 框架的限制,我们不得不改变一些设计。所以我们需要首先从序列中生成 id long,将该值连同名称和描述一起设置在 ClassA 的实例中,然后插入到 DB 中。因此,在这种情况下,插入语句不需要selectKey属性。id、name和description 值在对象中。当我像下面这样更新查询时,它会抛出Null Pointer Exception。
<insert id="insertTableA" parameterClass="com.ClassA">
INSERT INTO TableA(ID, NAME, DESCRIPTION) VALUES (#id#, #name#, #description#)
</insert>
我们如何在不使用 . 我首先从序列中生成键,用包括 id 在内的所有值填充对象,并尝试从 Java 调用语句,如下所示,
getSqlTemplate().insert("process.insertTableA", instanceClassA);
欢迎任何指点,
谢谢,标清