Hibernate根据表名获得实体类名及ID名

    private Map<String, String> mappings;
    private Map<String, String> idMappings;
    private Map<String, String> idColumns;

    public void initMappings() {
        if (mappings == null) {
            mappings = new HashMap<String, String>();
            idMappings = new HashMap<String, String>();
            idColumns = new HashMap<String, String>();
            SessionFactory factory = this.getSessionFactory();
            Map metaMap = factory.getAllClassMetadata();
            for (String key : (Set<String>) metaMap.keySet()) {
                AbstractEntityPersister classMetadata = (AbstractEntityPersister) metaMap
                        .get(key);
                String tableName = classMetadata.getTableName().toLowerCase();
                int index = tableName.indexOf(".");
                if (index >= 0) {
                    tableName = tableName.substring(index + 1);
                }
                String className = classMetadata.getEntityMetamodel().getName();
                String idName = classMetadata.getIdentifierColumnNames()[0];
                mappings.put(tableName.toUpperCase(), className);
                idColumns.put(tableName.toUpperCase(), idName);
                idMappings.put(className,
                        classMetadata.getIdentifierPropertyName());
            }
        }
    }

    public String getEntityName(String tableName) throws Exception {
        initMappings();
        String entityName = mappings.get(tableName.toUpperCase());
        if (entityName == null) {
            throw new Exception("表没有映射:" + tableName);
        }
        return entityName;
    }

    public String getIdName(String entityName) {
        initMappings();
        return idMappings.get(entityName);
    }

    public String getIdColumn(String tableName) {
        initMappings();
        return idColumns.get(tableName);
    }


转载于:https://my.oschina.net/javawdw/blog/291941

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值