Jan*_*ing 5 hibernate hibernate-5.x
我想使用休眠 5.x。在 hibernate 5.x 中,有新的接口ImplicitNamingStrategy和PhysicalNamingStrategy。
对于name实体的属性,User我希望user_name在我的数据库中有一个列名。我不想用@Column(name="..."). 我尝试编写自定义,ImplicitNamingStrategy但无法获取拥有实体的名称。
public class MyNamingStrategy extends ImplicitNamingStrategyComponentPathImpl
{
@Override
public Identifier determineBasicColumnName ( ImplicitBasicColumnNameSource source )
{
// How to get the name of the owning entity?
String owningEntityName = "howdoigetthis";
Identifier basicColumnName = super.determineBasicColumnName(source);
Identifier identifier = Identifier.toIdentifier(owningEntityName +"_" + basicColumnName.toString());
return identifier;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法只使用 NamingStrategy 来为每一列添加表(或实体)名称的前缀?
如果您不介意一点肮脏的反射,这里有一个解决方案:
@Override
public Identifier determineBasicColumnName(final ImplicitBasicColumnNameSource source)
{
// Get 'this$0' field and make it accessible
Field ejb3ColumnField = null;
final Field[] sourceFields = source.getClass().getDeclaredFields();
for (final Field sourceField : sourceFields) {
if (sourceField.getName().equals("this$0")) {
ejb3ColumnField = sourceField;
}
}
ejb3ColumnField.setAccessible(true);
// Get actual field object
String owningEntityName;
Ejb3Column ejb3Column;
try {
ejb3Column = (Ejb3Column) ejb3ColumnField.get(source);
} catch (
IllegalArgumentException
| IllegalAccessException e) {
throw new RuntimeException(e); // (Or deal with this appropriately, e.g. log it.)
}
// The property holder path holds the owning entity's fully qualified name
final String owningEntityFullyQualifiedName = ejb3Column.getPropertyHolder().getPath();
// The entity name is after the last dot in the fully qualified name
final String[] owningEntityTokens = owningEntityFullyQualifiedName.split("\\.");
owningEntityName = owningEntityTokens[owningEntityTokens.length - 1];
final Identifier basicColumnName = super.determineBasicColumnName(source);
return Identifier.toIdentifier(owningEntityName + "_" + basicColumnName.toString());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2413 次 |
| 最近记录: |