如何从Cayenne的MyTable类获取对应数据库表名my_table?
在Cayenne 4.2.RC2中通过实体类获取对应数据库表名的官方方法
你可以通过Cayenne的EntityResolver和ObjEntity官方API直接获取实体对应的数据库表名,完全不需要手动做驼峰/蛇形命名转换,具体实现方式如下:
方法1:通过ObjectContext获取
如果代码中已经持有ObjectContext实例(这是Cayenne操作数据的常用入口),按以下步骤操作:
// 假设已有ObjectContext实例 ObjectContext context = ...; // 获取管理实体元数据的EntityResolver EntityResolver resolver = context.getEntityResolver(); // 通过实体类获取对应的ObjEntity元数据对象 ObjEntity objEntity = resolver.getObjEntity(MyTable.class); // 从关联的DbEntity中提取数据库表名 String tableName = objEntity.getDbEntity().getName();
方法2:通过CayenneRuntime获取
如果没有现成的ObjectContext,可以直接从CayenneRuntime实例获取元数据:
// 初始化CayenneRuntime(通常在应用启动时执行一次) CayenneRuntime runtime = CayenneRuntime.builder() .addConfig("cayenne-project.xml") // 替换为你的配置文件路径 .build(); EntityResolver resolver = runtime.getEntityResolver(); ObjEntity objEntity = resolver.getObjEntity(MyTable.class); String tableName = objEntity.getDbEntity().getName();
补充说明
- 生成的实体类默认不会自带
TABLE_NAME常量,但如果需要,可以通过自定义Cayenne实体生成模板添加;不过上述两种方法都是官方标准API,无需修改生成逻辑。 ObjEntity对应Cayenne实体类的元数据,DbEntity对应数据库表的元数据,通过这两个对象还能获取字段名、约束等所有数据库映射信息。
内容的提问来源于stack exchange,提问作者Vin
相关产品推荐
相关产品推荐

