栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

是否可以在Hibernate / JPA中动态定义列名?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是否可以在Hibernate / JPA中动态定义列名?

您需要创建一个自定义的NamingStrategy。

假设您在JPA中使用spring和hibernate,这是带有自定义NamingStrategy的配置代码段:

<bean id="entityManagerFactory"    >    <property name="persistenceUnitName" value="myunit" />    <property name="dataSource" ref="dataSource" />    <property name="persistenceXmlLocation"   value="classpath:meta-INF/persistence.xml" />    <property name="jpaVendorAdapter">        <bean > <property name="showSql" value="false" /> <property name="generateDdl" value="true" /> <property name="database" value="MYSQL" />        </bean>    </property>    <property name="jpaProperties">        <props> <prop      key="hibernate.ejb.naming_strategy">     com.yourcompany.CustomNamingStrategy </prop>        </props>    </property></bean>

如果不使用spring,配置将有所不同,但是您仍然可以使用自定义的NamingStrategy(请参阅Hibernate文档中的实现NamingStrategy)。

无论如何,这是一个示例NamingStrategy,它为连接表构建TYPE1_TYPE2形式的表名,并为所有表添加一个公共前缀:

public class CustomNamingStrategy extends ImprovedNamingStrategy {    private static final long serialVersionUID = 1L;    private static final String PREFIX = "PFX_";    @Override    public String classToTableName(final String className) {        return this.addPrefix(super.classToTableName(className));    }    @Override    public String collectionTableName(final String ownerEntity, final String ownerEntityTable, final String associatedEntity, final String associatedEntityTable, final String propertyName) {        return this.addPrefix(super.collectionTableName(ownerEntity,     ownerEntityTable, associatedEntity, associatedEntityTable,     propertyName));    }    @Override    public String logicalCollectionTableName(final String tableName, final String ownerEntityTable, final String associatedEntityTable, final String propertyName) {        return this.addPrefix(super.logicalCollectionTableName(tableName,     ownerEntityTable, associatedEntityTable, propertyName));    }    private String addPrefix(final String composedTableName) {        return PREFIX     + composedTableName.toUpperCase().replace("_", "");    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417509.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号