NutzCN Logo
问答 关于数据分表存储的问题
发布于 2278天前 作者 bb3239 1764 次浏览 复制 上一个帖子 下一个帖子
标签: nutzwk

我有三个设备,我建了三个表去存储这三个设备的历史数据,分别叫data_his1,data_his2,data_his3,这三个表字段都相同,同时我建了一个跟历史表字段相同的pojo如下:

@Table
public class data_his {

    @Id
    @Column
    @ColDefine(type = ColType.INT)
    @Prev({
            @SQL(db= DB.MYSQL,value = "SELECT IFNULL(MAX(Id),0)+1 FROM data_his"),
            @SQL(db= DB.ORACLE,value = "SELECT COALESCE(MAX(Id),0)+1 FROM data_his")
    })
    private int Id;

    @Column
    @Comment("data")
    @ColDefine(type = ColType.TEXT)
    private String DataContent;

现在我遇到的问题是:
1,如果我用pojo去插入数据,如何动态解决对应到不同数据表名的问题?(比如我想把这个pojo插入到data_his2表)
2,如果采用dao去插入数据,那如何初始化int型Id字段?我是不是要去数据库里先查一下Max(Id),再+1后赋值?

PS:如果把Id换成guid的话比较容易解决,但我还是想用int型的。

有没有现有的接口,或者更好的解决方案?

5 回复

@wendal 问题基本解决了,就是还有一点,对于int型的Id字段,采用如下方式替换后报错:

@Table("data_his${id}")
public class data_his {

    @Id
    @Column
    @ColDefine(type = ColType.INT)
    @Prev({
            @SQL(db= DB.MYSQL,value = "SELECT IFNULL(MAX(Id),0)+1 FROM data_his${id}"),
            @SQL(db= DB.ORACLE,value = "SELECT COALESCE(MAX(Id),0)+1 FROM data_his${id}")
    })
    private int Id;

报错如下:

'SELECT IFNULL(MAX(Id),0)+1 FROM data_his${id}'
CaseMessage=You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{id}' at line 1

初步来看@Prev里面的${id}没有被替换,对于动态表名来说,是不是不能再用这种方式给Id赋值,我是不是得手动去获取Id赋值?

@wendal 刚看了一下nutz文档关于主键的描述,@Id字段默认就是自增的,我做多余了

添加回复
请先登陆
回到顶部