我有一个包含三列的表,其中sql类型为TimeStamp,TimeStampWithTimeZone和TimeStampWithLocalTimeZone。
在休眠逆向工程过程中,
TimeStamp 已正确映射到时间戳。
但 TimeStampWithTimeZone 和 TimeStampWithTimeZone 映射到可分割,期望两者都映射到 TimeStamp 。
在浏览了这个link之后,我在hibernate.reveng.xml中添加了以下映射。
<sql-type jdbc-type="OTHER" hibernate-type="java.sql.Timestamp" />
但我仍然将它映射到Seralizable。任何人都面临这个问题吗?
答案 0 :(得分:0)
通过扩展默认的RevengNamingStrategy来解决它。
方法: TIMESTAMP_WITH_TIMEZONE和TIMESTAMP_WITH_LOCAL_TIMEZONE类型的Sql类型是-101和-102,因为这些类型的 java.sql.Types 中没有hibernate映射类型,因此它们映射到可以集中化。
所以写了我自己的RevengNamingStrategy,它将这些类型转换为Timestamp.Which实习生转换为hibernate TimeStampType。
public class OracleRevengNamingStrategy extends DefaultRevengNamingStrategy {
private static final Integer TIMESTAMP_WITH_TIMEZONE_SQL_CODE = -101;
private static final Integer TIMESTAMP_WITH_LOCAL_TIMEZONE_SQL_CODE = -102;
public OracleRevengNamingStrategy(ReverseEngineeringStrategy delegate) {
super(delegate);
}
// Converts Timestamp with tomezone and Time stamp with local time zone to Timestamp
@Override
public String columnToHibernateTypeName(TableIdentifier table, String columnName, int sqlType, int length, int precision, int scale,
boolean nullable, boolean generatedIdentifier) {
String type;
if (sqlType == TIMESTAMP_WITH_TIMEZONE_SQL_CODE || sqlType == TIMESTAMP_WITH_LOCAL_TIMEZONE_SQL_CODE) {
type = "timestamp";
} else {
type = super.columnToHibernateTypeName(table, columnName, sqlType, length, precision, scale, nullable, generatedIdentifier);
}
return type;
}
}
如果有任何其他方法可以解决此问题,请告诉我。