- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我执行以下 Hibernate 调用时,我收到 ClassCastException(请参阅 Stacktrace),但我无法理解原因。 Hibernate 在这里想做什么?它是否试图将我的一个对象转换为不同的类类型?如果是,为什么以及到什么类(class)?
session.save(fooAccount);
堆栈跟踪:
com.foo.web.model.exception.FailedDatabaseOperationException: java.lang.ClassCastException: com.foo.web.model.authentication.SecurePassword
at com.foo.web.controller.db.HibernateController.savefooAccount(HibernateController.java:883)
at com.foo.web.model.account.fooAccount.save(fooAccount.java:459)
at com.foo.web.controller.AccountController.createfooAccount(AccountController.java:258)
at com.foo.web.view.start.RegisterController.register(RegisterController.java:233)
at com.foo.web.view.start.RegisterController.onClick$btn_register(RegisterController.java:196)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.zkoss.zk.ui.event.GenericEventListener.onEvent(GenericEventListener.java:81)
at org.zkoss.zk.ui.impl.EventProcessor.process0(EventProcessor.java:192)
at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:138)
at org.zkoss.zk.ui.impl.EventProcessingThreadImpl.process0(EventProcessingThreadImpl.java:517)
at org.zkoss.zk.ui.impl.EventProcessingThreadImpl.sendEvent(EventProcessingThreadImpl.java:121)
at org.zkoss.zk.ui.event.Events.sendEvent(Events.java:319)
at org.zkoss.zk.ui.event.Events.sendEvent(Events.java:329)
at org.zkoss.zk.ui.AbstractComponent$ForwardListener.onEvent(AbstractComponent.java:3034)
at org.zkoss.zk.ui.impl.EventProcessor.process0(EventProcessor.java:192)
at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:138)
at org.zkoss.zk.ui.impl.EventProcessingThreadImpl.process0(EventProcessingThreadImpl.java:517)
at org.zkoss.zk.ui.impl.EventProcessingThreadImpl.run(EventProcessingThreadImpl.java:444)
Caused by: java.lang.ClassCastException: com.foo.web.model.authentication.SecurePassword
at org.hibernate.type.ComponentType.toLoggableString(ComponentType.java:410)
at org.hibernate.type.ComponentType.toLoggableString(ComponentType.java:414)
at org.hibernate.pretty.Printer.toString(Printer.java:76)
at org.hibernate.pretty.Printer.toString(Printer.java:113)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:120)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
at com.foo.web.controller.db.HibernateController.savefooAccount(HibernateController.java:879)
<小时/>
编辑:以下是映射以及存储对象的代码:
映射文件(缩短版本。省略不相关的内容):
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated 26.04.2011 14:49:15 by Hibernate Tools 3.3.0.GA -->
<hibernate-mapping>
<class name="com.foo.web.model.account.fooAccount" table="fooACCOUNT">
<id name="id" type="long" access="field">
<column name="foo_ACCOUNT_ID" />
<generator class="native" />
</id>
<many-to-one name="defaultMailAccount" lazy="false" column="DEFAULT_MAIL_ACCOUNT_ID" />
<bag name="mailAccounts" table="MAILACCOUNTS" lazy="false" inverse="true">
<key column="foo_ACCOUNT_ID"></key>
<one-to-many class="com.foo.web.model.mail.account.MailAccount" />
</bag>
<component name="user" class="com.foo.web.model.account.fooUser">
<component name="activationCode">
<property name="activationCode" column="ACTIVATION_CODE"></property>
</component>
<component name="password" class="com.foo.web.model.authentication.MediumSecurePassword">
<property name="hash" column="PASSWORD" />
</component>
<component name="resetCode">
<property name="resetCode" column="RESET_CODE" />
</component>
<one-to-one name="fooAccount" class="com.foo.web.model.account.fooAccount"></one-to-one>
<component name="username">
<property name="username" column="USERNAME" unique="true" />
</component>
<property name="userStatus">
<column name="USERSTATUS" />
<type name="org.hibernate.type.EnumType">
<param name="type">12</param>
<param name="enumClass">com.foo.web.model.account.UserStatus</param>
</type>
</property>
<property name="userType">
<column name="USERTYPE" />
<type name="org.hibernate.type.EnumType">
<param name="type">12</param>
<param name="enumClass">com.foo.web.model.account.UserType</param>
</type>
</property>
</component>
</class>
</hibernate-mapping>
SecurePassword.java(缩短)
/**
* Represents a password.
*/
public class SecurePassword extends Password {
/**
* Default constructor
*/
public SecurePassword() {
super();
}
/**
* Constructor method. Will throw IllegalPasswordException if password is
* not safe.
*/
public SecurePassword(String password) throws IllegalPasswordException {
setPassword(password);
}
/**
* Checks if the given character is a number
*
* @param c
* The character to check
* @return Returns true if the given character is a number
*/
public boolean isNumber(char c) {
// ...
}
/**
* Checks is a given password is valid.
*/
public boolean passwordValid(Password password)
throws IllegalPasswordException {
return passwordValid(password.toString());
}
/**
* Checks is a given password is valid.
*/
public boolean passwordValid(String password)
throws IllegalPasswordException {
// ...
}
/**
* Sets a new password.
*/
@Override
public void setPassword(String password) throws IllegalPasswordException {
if (passwordValid(password)) {
this.password = password;
}
}
}
Password.java(缩写)
/**
* Represents a simple password without much restriction
*/
public class Password {
Crypter crypter = new Crypter();
String hash = null;
String password = null;
public Password() {
super();
}
public Password(String password) throws IllegalPasswordException {
setPassword(password);
}
@Override
public boolean equals(Object password) {
if (this == password) {
return true;
}
if (password instanceof Password) {
Password p = (Password) password;
return getHash().equals(p.getHash());
}
if (password instanceof String) {
String password_str = getPassword();
if (password_str != null) {
return password_str.equals(password);
}
}
return false;
}
/**
* Returns the hashed version of this password
*
* @return The hashed version of this password
*/
public String getHash() {
if (hash == null) {
try {
hash = crypter.hash(getPassword());
} catch (FailedCryptOperationException e) {
handleException(e, false, null, null);
}
}
return hash;
}
public String getPassword() {
return password;
}
/*
* Handles the given exception
*/
private void handleException(Exception e, boolean notifyUser,
String customTitle, String customErrorMessage) {
SystemController.handleException(e, notifyUser, customTitle,
customErrorMessage);
}
public void setHash(String hash) {
this.hash = hash;
}
@SuppressWarnings("unused")
public void setPassword(String password) throws IllegalPasswordException {
hash = null;
this.password = password;
}
@Override
public String toString() {
return getPassword();
}
}
MediumSecurePassword.java
public class MediumSecurePassword extends SecurePassword {
public final int MAX_LENGTH = 64;
public final int MIN_LENGTH = 6;
StringUtil stringUtil = new StringUtil();
public MediumSecurePassword() {
super();
}
/**
* Constructor method. Will throw IllegalPasswordException if password is
* not safe. Medium Safe passwords are at least 6 characters long.
*/
public MediumSecurePassword(String password) throws IllegalPasswordException {
setPassword(password);
}
/**
* Checks if the given character is a number
*/
public boolean isNumber(char c) {
// ...
}
/**
* Checks is a given password is valid. Valid means that it's secure (at
* least 8 characters, at least 1 number, at least 1 special character).
*/
public boolean passwordValid(Password password)
throws IllegalPasswordException {
return passwordValid(password.toString());
}
/**
* Checks is a given password is valid. Valid means that it's "medium secure" (min.
* length of 6).
*/
public boolean passwordValid(String password)
throws IllegalPasswordException {
// ...
}
/**
* Sets a new password. Will throw IllegalPasswordException if password is
* not safe. Safe passwords are at least 8 characters long, consist of
* numbers, letters and special characters.
*/
@Override
public void setPassword(String password) throws IllegalPasswordException {
if (passwordValid(password)) {
this.password = password;
}
}
}
<小时/>
注意:如果我从映射文件中删除这 3 行,一切都会顺利运行:
<component name="password" class="com.foo.web.model.authentication.MediumSecurePassword">
<property name="hash" column="PASSWORD" />
</component>
那么,对我来说,通过 passwordInstance.getHash()
获取密码的哈希值似乎存在问题?但不确定。
最佳答案
在映射中使用密码子类的子类背后的想法是什么?
<component name="password" class="com.foo.web.model.authentication.MediumSecurePassword">
<property name="hash" column="PASSWORD" />
</component>
这里发生的情况是,您需要在持久上序列化特定实现。在您的情况下,您的对象实现了父类 (SecurePassword),因此它不能转换为 MediumSecurePassword。
我建议在映射中使用父类,这样您就可以在实现中使用 SecurePassword 和 MediumSecurePassword:
<component name="password" class="com.foo.web.model.authentication.Password">
<property name="hash" column="PASSWORD" />
</component>
关于java - 为什么 Hibernate 在调用 session.save(object) 时会抛出 ClassCastException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10043771/
我正在编写一个 mapreduce 应用程序,它接受(键,值)格式的输入并只显示与 reducer 输出相同的数据。 这是示例输入: 1500s 1 1960s 1 Aldus 1 在下面
我不明白,我有一个典型的消息源 content.Language 我可以得到它就像 @Autowire protec
我已经为抽屉导航编写了一个运行良好的程序,但最近我尝试为个人资料图片和 TextView 放置一个 ImageView,之后它给了我一个 ClassCastException。 main_activi
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
@Override public void onPause() { super.onPause(); save(notes.itemSelected); } @Override pub
描述 我正在尝试创建一种自定义语言,我想将词法分析器规则与解析器规则分开。此外,我的目标是将词法分析器和解析器规则进一步划分为特定文件(例如,通用词法分析器规则和关键字规则)。 但我似乎无法让它发挥作
我正在尝试使用以下代码为给定的 Runnable 对象创建代理: public class WorkInvocationHandler implements InvocationHandler {
我有两个非常简单的类,一个扩展了另一个: public class LocationType implements Parcelable { protected int locid =
我遇到了 ClassCastException :Cannot cast my.package.classA to my.package.classA.请注意,(规范)类(名称)是相同的。 我知道这应
我有一个代码试图将一个函数包装在另一个执行动态类型检查的函数中: class Base class Foo extends Base class Bar extends Base object Mai
我使用hadoop 0.18.3遇到以下错误 java.lang.ClassCastException:org.apache.hadoop.io.Text无法转换为org.apache.hadoop.
在 org.dozer.BeanFactory.createBean(Object, Class, String) 的实现中我尝试将对象转换为它的类型。如果我部署所有 bundle ,即关闭并启动所有
我有这个代码: package Maven_test.Maven_project_test; public class Test { class A { int i = 10;
我一直在尝试对 Wicket 的 WebSession 进行子类化,以便可以实现基本的身份验证系统。我已遵循 Wicket 引用库中的指南。当我在网页中尝试以下操作时,出现 ClassCastExce
我正在构建一个 kotlin AAR 库,我需要在发布之前对其进行混淆。我有以下结构: package com.example.token interface TokenManager { s
Kotlin 引入了 here 中描述的声明站点差异. 在某些情况下,泛型参数的 out/in 关键字可能会导致 ClassCastException。我的程序如下所示。 fun main(args:
我正在 AnyLogic 中进行基于代理的传染病流行模拟。我的模型中有两种代理类型 - 人员和建筑物。我正在尝试编写一个函数来计算代理类型“人员”在任何给定时间点所具有的传染性接触数量。下面是我的函数
我有一个 EditContact 类。打开后,它会显示哪些复选框已选中或未选中。这是通过我的适配器中的一些代码完成的,它可以正常工作: //This is for EditContact, t
这个问题已经有答案了: 奥 git _a (2 个回答) 已关闭 5 年前。 我正在获取 ClassCastException 。这两个类来自不同的 jar,但是JettyContinuationPr
我想在 Java 中使用一组对,但是当我调用 contains() 来查看它是否已包含特定对时,我总是会得到 ClassCastException >。有没有办法避免这种行为? 它的实例化如下: pr
我是一名优秀的程序员,十分优秀!