NutzCN Logo
问答 索引名称能否增加当前表名的占位符?
发布于 2606天前 作者 幸福的旁边 2074 次浏览 复制 上一个帖子 下一个帖子
标签:

比如
```java
@Table("my_corp")
@TableIndexes({@Index(fields = "name",name = "${table}_name")})
public class Corp {
...
}

```
生成索引名称为 my_corp_name
再进一步,能否给@Index增加自动生成name的机制,
name = 表名_字段1_字段2....
这样

3 回复

表名是固定的吧? 加上这个的能省什么呢?

如果能自动生成@Index的name,那占位符就不用了
告诉dao索引哪几个字段,是否唯一就好了,名字嘛 自动搞定即可
也就能少写几个字 😓

翻了翻代码,事实上有类似的功能

    public Sql createIndexSql(Entity<?> en, EntityIndex index) {
        StringBuilder sb = new StringBuilder();
        if (index.isUnique())
            sb.append("Create UNIQUE Index ");
        else
            sb.append("Create Index ");
        if (index.getName().contains("$"))
            sb.append(TableName.render(new CharSegment(index.getName())));
        else
            sb.append(index.getName());
        sb.append(" ON ").append(en.getTableName()).append("(");
        for (EntityField field : index.getFields()) {
            if (field instanceof MappingField) {
                MappingField mf = (MappingField) field;
                sb.append(mf.getColumnNameInSql()).append(',');
            } else {
                throw Lang.makeThrow(DaoException.class,
                                     "%s %s is NOT a mapping field, can't use as index field!!",
                                     en.getClass(),
                                     field.getName());
            }
        }
        sb.setCharAt(sb.length() - 1, ')');
        return Sqls.create(sb.toString());
    }
添加回复
请先登陆
回到顶部