nutz
nutz copied to clipboard
在Chain.from的时候能不能优先根据@column 注解来生成插入的信息
用的版本是1.r.54 , 我本身有一个pojo,由于业务逻辑的原因,有字段和数据库字段名字不一样,是有@column注解的,但是在用chain.from() 方法的时候,他好像不会关心@column注解,只是根据属性名来生成最后插入的sql。 个人觉得既然pojo中有这个@column注解了,感觉这个方法是可以优先根据这个来生成sql的。 或者有没有别的方法替代呢?或者有没有增加一个这么个方法的计划?
先看看最新版的实现是怎样的?
@wendal 刚刚测试了1.r.63 也是一样 方法是 nutDao.insert(String tabname, Chain.from(POJO)).
@wendal 首先 先谢谢老铁,在大元旦还在回复我。。。
新版有这个
public static Chain from(Object obj, FieldMatcher fm, Dao dao) {
用上面这个方法测试的结果好像和之前的是一样的。(也是不会关心@column的注解。)
另外不知道1.r.6.0和之后的版本有什么差异,在我们项目进行热部署的时候,查出的list
热部署的话,可以把FastClass和Mirror Cache关掉
static {
NutConf.USE_FASTCLASS=false;
NutConf.USE_MIRROR_CACHE=false;
}
写到MainModule里面就行
好的,谢谢!!!!,我暂时先把另外一个改一个pojo的属性名。。再次谢谢。。
你的测试代码是怎样的? 我看了看代码, from给出的都是java属性名,这才是对的呢
在使用的时候,才会更新到数据库字段名, 额,你的场景是直接写表的名字,没有加Pojo类?
我们开发是在终端,不方便拿出来,我大致描述一下。 Java 类 @Table("$tablename") public class *** { @Column("ywjgdm") String jgdm }
因为这个table名不是固定的。所以我插入的时候用的方法就是 nutDao.insert(String tabname, Chain from(Object obj, FieldMatcher fm, Dao dao)) 这个方法。 我想要的最后的结果就是(insert into tabname (ywjgdm) values(?) ),但是实际执行的时候 是(insert into tabname (jgdm) values(?))。
insert的第一个参数改成obj.getClass()
但是那个数据库的table名并没有在注解里写出来,这样是不是就找不到表了?是不是就必须要加那个TableName.set 才行。
那你还写@Column ... , 话说加上@Table也无妨吧? 因为是动态的?
嗯,3中数据状态,同样的结构,所以就有3个不同的表名,要根据不通的状态来修改这几个表里的数据。。表结构是一样的。我觉得是不是可以出一个这么个方法(就是chain的from 可以根据@column,或者@pk(用于查询))这样子,更灵活一点。。
额, 这样子,我想想
public static Chain from(Object obj, FieldMatcher fm, Dao dao) {
final Chain[] chains = new Chain[1];
boolean re = Daos.filterFields(obj, fm, dao, new Callback2<MappingField, Object>() {
public void invoke(MappingField mf, Object val) {
if (mf.isReadonly() || !mf.isUpdate())
return;
if (chains[0] == null)
chains[0] = Chain.make(mf.getColumnName(), val);
else
chains[0].add(mf.getColumnName(), val);
}
});
if (re)
return chains[0];
return null;
}
好的,我下午试试,吃饭先,,谢谢!!! 感谢!!