Browse Source

jfinal 3.2 release ^_^

James 8 years ago
parent
commit
36fb3a78c2

+ 1 - 1
src/main/java/com/jfinal/plugin/activerecord/Record.java

@@ -45,7 +45,7 @@ public class Record implements Serializable {
 		return this;
 	}
 	
-	// Only used by RecordBuilder
+	// 用于 RecordBuilder 中注入 Map。也可以通过调用 CPI.setColumnsMap(record, columns) 实现
 	void setColumnsMap(Map<String, Object> columns) {
 		this.columns = columns;
 	}

+ 13 - 9
src/main/java/com/jfinal/plugin/activerecord/dialect/Dialect.java

@@ -77,7 +77,8 @@ public abstract class Dialect {
 	}
 	
 	/**
-	 * Get id after save method.
+	 * 用于获取 Model.save() 以后自动生成的主键值,可通过覆盖此方法实现更精细的控制
+	 * 目前只有 PostgreSqlDialect,覆盖过此方法
 	 */
 	public void getModelGeneratedKey(Model<?> model, PreparedStatement pst, Table table) throws SQLException {
 		String[] pKeys = table.getPrimaryKey();
@@ -86,12 +87,14 @@ public abstract class Dialect {
 			if (model.get(pKey) == null || isOracle()) {
 				if (rs.next()) {
 					Class<?> colType = table.getColumnType(pKey);
-					if (colType == Integer.class || colType == int.class) {
-						model.set(pKey, rs.getInt(1));
-					} else if (colType == Long.class || colType == long.class) {
-						model.set(pKey, rs.getLong(1));
-					} else {
-						model.set(pKey, rs.getObject(1));		// It returns Long object for int colType
+					if (colType != null) {	// 支持没有主键的用法,有人将 model 改造成了支持无主键:济南-费小哥
+						if (colType == Integer.class || colType == int.class) {
+							model.set(pKey, rs.getInt(1));
+						} else if (colType == Long.class || colType == long.class) {
+							model.set(pKey, rs.getLong(1));
+						} else {
+							model.set(pKey, rs.getObject(1));	// It returns Long for int colType for mysql
+						}
 					}
 				}
 			}
@@ -100,14 +103,15 @@ public abstract class Dialect {
 	}
 	
 	/**
-	 * Get id after save record.
+	 * 用于获取 Db.save(tableName, record) 以后自动生成的主键值,可通过覆盖此方法实现更精细的控制
+	 * 目前只有 PostgreSqlDialect,覆盖过此方法
 	 */
 	public void getRecordGeneratedKey(PreparedStatement pst, Record record, String[] pKeys) throws SQLException {
 		ResultSet rs = pst.getGeneratedKeys();
 		for (String pKey : pKeys) {
 			if (record.get(pKey) == null || isOracle()) {
 				if (rs.next()) {
-					record.set(pKey, rs.getObject(1));
+					record.set(pKey, rs.getObject(1));	// It returns Long for int colType for mysql
 				}
 			}
 		}

+ 2 - 2
src/main/java/com/jfinal/plugin/activerecord/dialect/PostgreSqlDialect.java

@@ -213,7 +213,7 @@ public class PostgreSqlDialect extends Dialect {
 	 * 解决 PostgreSql 获取自增主键时 rs.getObject(1) 总是返回第一个字段的值,而非返回了 id 值
 	 * issue: https://www.oschina.net/question/2312705_2243354
 	 * 
-	 * 将 rs.getXxx(1) 改成了 rs.getXxx(pKey)
+	 * 相对于 Dialect 中的默认实现,仅将 rs.getXxx(1) 改成了 rs.getXxx(pKey)
 	 */
 	public void getModelGeneratedKey(Model<?> model, PreparedStatement pst, Table table) throws SQLException {
 		String[] pKeys = table.getPrimaryKey();
@@ -239,7 +239,7 @@ public class PostgreSqlDialect extends Dialect {
 	 * 解决 PostgreSql 获取自增主键时 rs.getObject(1) 总是返回第一个字段的值,而非返回了 id 值
 	 * issue: https://www.oschina.net/question/2312705_2243354
 	 * 
-	 * 将 rs.getXxx(1) 改成了 rs.getXxx(pKey)
+	 * 相对于 Dialect 中的默认实现,仅将 rs.getXxx(1) 改成了 rs.getXxx(pKey)
 	 */
 	public void getRecordGeneratedKey(PreparedStatement pst, Record record, String[] pKeys) throws SQLException {
 		ResultSet rs = pst.getGeneratedKeys();