Java 使用Hibernate从MS SQL检索值时出错
我已经完成了一个程序,在这个程序中,我必须从MS SQL中的表中检索数据。我使用的是Java 使用Hibernate从MS SQL检索值时出错,java,sql-server,hibernate,entity,Java,Sql Server,Hibernate,Entity,我已经完成了一个程序,在这个程序中,我必须从MS SQL中的表中检索数据。我使用的是Hibernate,其中AbtDebtbyCAN是一个实体类。到目前为止,连接还不错,但我面临的唯一问题是使用注释映射从MS SQL打印数据债务是要映射的表的名称(表的名称以小写字母表示)。下面是我想用Hibernate打印出来的结果。有谁能帮助我实现数据的获取吗 债务 id can bdrl_debt excess_ta_debt posting_ref
Hibernate
,其中AbtDebtbyCAN
是一个实体
类。到目前为止,连接还不错,但我面临的唯一问题是使用注释映射从MS SQL打印数据<代码>债务是要映射的表的名称(表的名称以小写字母表示)。下面是我想用Hibernate
打印出来的结果。有谁能帮助我实现数据的获取吗
债务
id can bdrl_debt excess_ta_debt posting_ref debt_settlement_id debt_settlement_at debt_business_date
11425 1099112400000003 0 200 501728 137 2020-10-13 10:51:50.000 2020-10-13
public class AbtCANMapperTest {
public static void main(String args[]) {
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
Metadata meta = new MetadataSources(ssr).getMetadataBuilder().build();
SessionFactory factory = meta.getSessionFactoryBuilder().build();
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
List abtdebt = session.createQuery("FROM AbtDebtbbyCAN WHERE debt_can=1099112400000003").getResultList();
for (Iterator iterator = abtdebt.iterator(); iterator.hasNext(); ) {
AbtDebtbbyCAN abtcan = (AbtDebtbbyCAN) iterator.next();
System.out.print("debt id: " + abtcan.getDebt_id());
System.out.print("debt can: " + abtcan.getDebt_can());
System.out.print("bdrl debt: " + abtcan.getBdrl_debt());
System.out.print("excess debt: " + abtcan.getExcess_ta_debt());
System.out.print("posting ref: " + abtcan.getPosting_ref());
System.out.print("debt settlement id: " + abtcan.getDebt_settlement_id());
System.out.print("debt settlement at: " + abtcan.getDebt_settlement_at());
System.out.println("debt business date: " + abtcan.getDebt_business_date());
}
tx.commit();
} catch (HibernateException e) {
if (tx != null) tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
}
}
AbtDebtbyCAN
@Data
@Entity
@Table(name = "debt")
public class AbtDebtbbyCAN implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int debt_id;
@Column(name = "can")
private int debt_can;
@Column(name = "bdrl_debt")
private int bdrl_debt;
@Column(name = "excess_ta_debt")
private int excess_ta_debt;
@Column(name = "posting_ref")
private int posting_ref;
@Column(name = "debt_settlement_id")
private int debt_settlement_id;
@Column(name = "debt_settlement_at")
private DateTime debt_settlement_at;
@Column(name = "debt_business_date")
private Date debt_business_date;
}
abtcamappertest
id can bdrl_debt excess_ta_debt posting_ref debt_settlement_id debt_settlement_at debt_business_date
11425 1099112400000003 0 200 501728 137 2020-10-13 10:51:50.000 2020-10-13
public class AbtCANMapperTest {
public static void main(String args[]) {
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
Metadata meta = new MetadataSources(ssr).getMetadataBuilder().build();
SessionFactory factory = meta.getSessionFactoryBuilder().build();
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
List abtdebt = session.createQuery("FROM AbtDebtbbyCAN WHERE debt_can=1099112400000003").getResultList();
for (Iterator iterator = abtdebt.iterator(); iterator.hasNext(); ) {
AbtDebtbbyCAN abtcan = (AbtDebtbbyCAN) iterator.next();
System.out.print("debt id: " + abtcan.getDebt_id());
System.out.print("debt can: " + abtcan.getDebt_can());
System.out.print("bdrl debt: " + abtcan.getBdrl_debt());
System.out.print("excess debt: " + abtcan.getExcess_ta_debt());
System.out.print("posting ref: " + abtcan.getPosting_ref());
System.out.print("debt settlement id: " + abtcan.getDebt_settlement_id());
System.out.print("debt settlement at: " + abtcan.getDebt_settlement_at());
System.out.println("debt business date: " + abtcan.getDebt_business_date());
}
tx.commit();
} catch (HibernateException e) {
if (tx != null) tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
}
}
错误堆栈跟踪
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.type.SerializationException: could not deserialize
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1542)
at org.hibernate.query.Query.getResultList(Query.java:165)
at AbtMainTestControl.AbtTestObj.AbtCANMapperTest.main(AbtCANMapperTest.java:36)
Caused by: org.hibernate.type.SerializationException: could not deserialize
at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:243)
at org.hibernate.internal.util.SerializationHelper.deserialize(SerializationHelper.java:287)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:138)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:113)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:29)
at org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:60)
at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:243)
at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:329)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:3088)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1907)
at org.hibernate.loader.Loader.hydrateEntityState(Loader.java:1835)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1808)
at org.hibernate.loader.Loader.getRow(Loader.java:1660)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:745)
at org.hibernate.loader.Loader.getRowsFromResultSet(Loader.java:1044)
at org.hibernate.loader.Loader.processResultSet(Loader.java:995)
at org.hibernate.loader.Loader.doQuery(Loader.java:964)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:350)
at org.hibernate.loader.Loader.doList(Loader.java:2887)
at org.hibernate.loader.Loader.doList(Loader.java:2869)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2701)
at org.hibernate.loader.Loader.list(Loader.java:2696)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:506)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:400)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:219)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1415)
at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1565)
at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1533)
... 2 more
Caused by: java.io.StreamCorruptedException: invalid stream header: 0000AC53
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:899)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:357)
at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:309)
at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:299)
at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:218)
... 32 more
Caused by: org.hibernate.type.SerializationException: could not deserialize
> Task :AbtCANMapperTest.main() FAILED
Caused by: java.io.StreamCorruptedException: invalid stream header: 0000AC53
Execution failed for task ':AbtCANMapperTest.main()'.
> Process 'command 'C:/Program Files/Java/jdk1.8.0_241/bin/java.exe'' finished with non-zero exit value 1
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
线程“main”javax.persistence.PersistenceException:org.hibernate.type.SerializationException:无法反序列化
位于org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
位于org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1542)
位于org.hibernate.query.query.getResultList(query.java:165)
在AbtMainTestControl.AbtTestObj.AbtCANMapperTest.main(AbtCANMapperTest.java:36)
原因:org.hibernate.type.SerializationException:无法反序列化
位于org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:243)
位于org.hibernate.internal.util.SerializationHelper.deserialize(SerializationHelper.java:287)
位于org.hibernate.type.descriptor.java.SerializableTypeScriptor.fromBytes(SerializableTypeScriptor.java:138)
位于org.hibernate.type.descriptor.java.SerializableTypeScriptor.wrap(SerializableTypeScriptor.java:113)
位于org.hibernate.type.descriptor.java.SerializableTypeScriptor.wrap(SerializableTypeScriptor.java:29)
位于org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:60)
位于org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)
位于org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257)
位于org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)
位于org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:243)
位于org.hibernate.type.AbstractStandardBasicType.hydroge(AbstractStandardBasicType.java:329)
位于org.hibernate.persister.entity.AbstractEntityPersister.hydroge(AbstractEntityPersister.java:3088)
位于org.hibernate.loader.loader.loadFromResultSet(loader.java:1907)
位于org.hibernate.loader.loader.hydrateEntityState(loader.java:1835)
位于org.hibernate.loader.loader.instanceNotYetLoaded(loader.java:1808)
位于org.hibernate.loader.loader.getRow(loader.java:1660)
位于org.hibernate.loader.loader.getRowFromResultSet(loader.java:745)
位于org.hibernate.loader.loader.getRowsFromResultSet(loader.java:1044)
位于org.hibernate.loader.loader.processResultSet(loader.java:995)
位于org.hibernate.loader.loader.doQuery(loader.java:964)
在org.hibernate.loader.loader.doQueryAndInitializeNonLazyCollections(loader.java:350)上
位于org.hibernate.loader.loader.doList(loader.java:2887)
位于org.hibernate.loader.loader.doList(loader.java:2869)
位于org.hibernate.loader.loader.listIgnoreQueryCache(loader.java:2701)
位于org.hibernate.loader.loader.list(loader.java:2696)
位于org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:506)
位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:400)
位于org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:219)
位于org.hibernate.internal.SessionImpl.list(SessionImpl.java:1415)
位于org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1565)
位于org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1533)
... 还有两个
原因:java.io.StreamCorruptedException:无效的流头:0000AC53
位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:899)
位于java.io.ObjectInputStream。(ObjectInputStream.java:357)
位于org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream。(SerializationHelper.java:309)
位于org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream。(SerializationHelper.java:299)
位于org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:218)
... 32多
原因:org.hibernate.type.SerializationException:无法反序列化
>任务:AbtCANMapperTest.main()失败
原因:java.io.StreamCorruptedException:无效的流头:0000AC53
任务“:AbtCANMapperTest.main()”的执行失败。
>进程“command”C:/Program Files/Java/jdk1.8.0_241/bin/Java.exe“”以非零退出值1结束
*尝试:
使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获得更多日志输出。使用--scan运行以获得完整的洞察力。
不确定您在这里使用的是什么类型,但至少
DateTime
不是Hibernate支持的标准类型。如果Hibernate不知道某个类型,它将尝试以blob/byte[]的序列化形式刷新该值。如果您使用java.sql.Timestamp
,java.util.Calendar
或Hibernate开箱即用支持的任何其他类型,这应该可以正常工作。有人能告诉我问题出在哪里吗?我迫切需要一个答案,16位的can
值是否会反序列化为Javaint
?也许你需要一个长的。似乎Hibernate映射只有在所有变量都具有与MS SQL表中的对象互补的数据类型时才起作用?我的思路对吗?@我一直在学习,我还是会犯同样的错误。我该怎么解决?我已经设法解决了。我使用了String
作为我所有的v