我最近正在完成一项任务,我正在重构一个旧的Web项目。首先,我尝试在开始重构之前在我的本地weblogic实例上运行该项目。
当我尝试部署应用程序时,我得到了一个hibernate异常,如下所示==>
Caused By: org.hibernate.AnnotationException: Unknown Id.generator: unique-id
at org.hibernate.cfg.BinderHelper.makeIdGenerator(BinderHelper.java:428)
at org.hibernate.cfg.AnnotationBinder.bindId(AnnotationBinder.java:1901)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1279)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:754)
at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:546)
Truncated. see log file for complete stacktrace
上面的例外意味着它无法找到名为“unique-id”的id生成器。然后我深入研究代码,看到实体中的id字段是字符串。并且有一个自定义ID生成器类正在实现hibernate IdentifierGenerator类,它调用db函数来为每次调用时生成字母数字id。下面是实体类中的一段代码,它定义了id生成的类型。
@Id
@Column(name = "ID", nullable = false, length = 18)
@GenericGenerator(name = "unique-id", strategy = "com.common.entity.RowIdGenerator")
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "unique-id")
private String id;
这是用于生成字母数字id的RowIdGenerator类。
public class RowIdGenerator implements IdentifierGenerator
{
private final static String SQL_TEXT = "SELECT TCC.F_ROW_ID_GEN FROM DUAL";
@Override
public Serializable generate(SessionImplementor sessionImplemetor, Object object) throws HibernateException
{
return this.getNextNumber(sessionImplemetor);
}
private String getNextNumber(SessionImplementor session)
{
try
{
ResultSet rs = null;
PreparedStatement statement = null;
try
{
statement = session.getBatcher().prepareSelectStatement(SQL_TEXT);
rs = statement.executeQuery();
String nextValue = null;
if (rs.next())
nextValue = rs.getString(1);
if (nextValue == null)
throw new HibernateException("is is null.");
return nextValue;
}
finally
{
if (rs != null)
rs.close();
if (statement != null)
session.getBatcher().closeStatement(statement);
}
} catch (SQLException sqle)
{
throw JDBCExceptionHelper.convert(session.getFactory().getSQLExceptionConverter(), sqle, "could not fetch initial value for increment generator", SQL_TEXT);
}
}
}
可能导致此错误的原因是什么?我看到名为“unique-id”的生成器已定义并注释。据我所知,代码中没有错误,可能是因为我的本地weblogic实例的配置,但任何评论和建议都会受到赞赏。
问候
答案 0 :(得分:0)
你可以只自动生成数字作为ids.hibernate不支持其他类型的字符串生成