我正在创建一个程序来创建一个文件并给它一个唯一的名称。 根据提出的技术,我们需要有顺序文件名。 恩。 Myfile-00001(格式:MyFile-Sequence)。 我正在使用oracle序列来维护文件名的序列号。
下面是我试图编写的示例代码,以获取oracle序列中的序列。 如果我只能从Oracle序列中获取序列字符串,我可以使用它来命名我正在创建的文件。
以下是我的代码:
public class TestSequence {
public static void main(String[] args) {
// TODO Auto-generated method stub
Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sf = cfg.buildSessionFactory();
Session ses = sf.openSession();
System.out.println("Next Val: "+getNextKey(ses));
ses.close();
sf.close();
}
public static String getNextKey(Session ses)
{
Query query = ses.createSQLQuery( "select atl_seq.nextval from dual" );
String key = (String) query.uniqueResult();
return key;
}
}
但它给了我错误:
Next Val:
Hibernate: select atl_seq.nextval from dual
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.lang.String
at test.TestSequence.getNextKey(TestSequence.java:31)
at test.TestSequence.main(TestSequence.java:23)
请帮助我如何将唯一结果转换为字符串。 没有使用映射文件,因为我直接运行查询。
我已经google了很多并找到了类似的例子,他们将独特的结果转换为Long,但即使该代码没有运行,它也给我同样的错误:无法将[Ljava.lang.Object强制转换为Long。
我的序列是:
CREATE SEQUENCE "ATL_SEQ" MINVALUE 1 MAXVALUE 100 INCREMENT BY 1 START WITH 1 CACHE 48
答案 0 :(得分:0)
序列可能返回long或整数。所以你需要转换为而不是字符串!
Long key = (Long) query.uniqueResult();
或
Integer key = (Integer) query.uniqueResult();
不知道它是哪一个,但很容易为自己尝试。
答案 1 :(得分:0)
尝试使用addScalar()并将类型指定为Long
(对于 Hibernate4 )
public static Long getNextKey(Session ses) {
Query query = ses.createSQLQuery("select atl_seq.nextval as num from dual")
.addScalar("num", LongType.INSTANCE);
return (Long)query.uniqueResult();
}
如果您使用的是 Hibernate3 ,请输入
addScalar("num", Hibernate.LONG);
您可以稍后将值Long
转换为String
。