hibernate如何在不添加现有列(ColumnName到column_name)的情况下处理现有表



当我运行应用程序时,hibernate会创建列的重复项,我不希望发生这种情况。我希望它检查列是否存在,如果存在,它应该忽略它们并移动。我想避免这种重复,并使用第一个选项。

我尝试在列注释中指定我想要的列的名称。以及CCD_ 1和

首先需要获得该类中的列的列表。您可以使用org.hubinate.metadata.ClassMetadata实体:来实现这一点

ClassMetadata classMetadata = sessionFactory.getClassMetadata(AppTaskConfig.class);
String[] propertyNames = classMetadata.getPropertyNames();

其中propertyNames是一个字符串数组,表示AppTaskConfig的属性名称。

现在使用Hibernate org.Hibernate.cfg.Configuration对象,您可以找到属性的列名:

for (String property : propertyNames) {
Configuration configuration = sessionFactoryBean.getConfiguration();
PersistentClass persistentClass = configuration
.getClassMapping(Details.class.getName());
String columnName = ((Column) persistentClass.getProperty(property)
.getColumnIterator().next()).getName();
}

为了跳过映射,您可以简单地在实体上使用@Transient注释。

最新更新