我用struts2.0+spring2.5+hibernate3.2写了个工程。由于用户信息需要加密,所以我用了UserType,将username和password加密。该项目在JUnit和Jetty下都能正常运行,但在tomcat6下却报如下错误。哪位能给点提示啊?
-------------------------------------------------------------
Struts has detected an unhandled exception:
Messages: No entity found for query
File: org/hibernate/ejb/QueryImpl.java
Line number: 104
--------------------------------------------------------------
我的程序@Entity
@Table(name="user")
public class User implements java.io.Serializable {
private String userId;
private String username;
private String password;
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid.hex")
@Column(name="USER_ID", unique=true, nullable=false)
public String getUserId() {
return userId;
} public void setUserId(String userId) {
this.userId = userId;
}
@Type(type = "EncryptType")
@Column(name="USERNAME")
public String getUsername() {
return username;
} public void setUsername(String userName) {
this.username = userName;
}
@Type(type = "EncryptType")
@Column(name="PASSWORD")
public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
}
}
public class EncryptType implements UserType { public Object assemble(Serializable cached, Object owner) throws HibernateException {
return null;
} public Object deepCopy(Object value) throws HibernateException { if (value == null) {
return null;
} else {
return new String((String) value);
}
} public Serializable disassemble(Object value) throws HibernateException { return null; } public boolean equals(Object x, Object y) throws HibernateException { return (x == y) || (x != null && y != null && (x.equals(y))); } public int hashCode(Object x) throws HibernateException {
return x.hashCode();
} public boolean isMutable() {
return false;
} public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {//Get bin data from database then decrypt to String byte[] data = rs.getBytes(names[0]); return Encryption.getInstance().decrypt(data); } public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException { if (value == null) {
return;
}
//Encrypt String to bin data byte data[] = Encryption.getInstance().encrypt(value.toString());
st.setBytes(index, data);
} public Object replace(Object original, Object target, Object owner) throws HibernateException {
return null;
} public Class returnedClass() {
return java.lang.String.class;
} public int[] sqlTypes() {
return new int[] { Types.BINARY };
}
}
public class Encryption { private Cipher en;
private Cipher de; public byte[] encrypt(String s) { try {
byte[] data = s.getBytes();
if (data.length % 8 != 0) {
int length = 8 - data.length % 8;
byte[] spaces = new byte[length];
for (int i = 0; i < spaces.length; i++) {
spaces[i] = 0x20;
}
data = ArrayUtils.addAll(data, spaces);
}
return en.doFinal(data); } catch (Exception e) {
throw new RuntimeException(e);
}
} public String decrypt(byte[] b) { try {
byte[] data = de.doFinal(b);
return new String(data).trim();
} catch (Exception e) {
throw new RuntimeException(e);
} } private Encryption() { try {
DESKeySpec deskey = new DESKeySpec("X009我要理财".getBytes());
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
SecretKey key = skf.generateSecret(deskey);
IvParameterSpec iv = new IvParameterSpec(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 });
en = Cipher.getInstance("DES/CBC/NoPadding");
en.init(Cipher.ENCRYPT_MODE, key, iv);
de = Cipher.getInstance("DES/CBC/NoPadding");
de.init(Cipher.DECRYPT_MODE, key, iv); } catch (Exception e) {
throw new RuntimeException(e);
}
} private static Encryption instance = new Encryption(); public static Encryption getInstance() { return instance; }
}数据库CREATE TABLE `user` (
`user_id` varchar(32) NOT NULL DEFAULT '',
`USERNAME` varbinary(128) DEFAULT NULL,
`PASSWORD` varbinary(128) DEFAULT NULL,
PRIMARY KEY (`user_id`)
)
-------------------------------------------------------------
Struts has detected an unhandled exception:
Messages: No entity found for query
File: org/hibernate/ejb/QueryImpl.java
Line number: 104
--------------------------------------------------------------
我的程序@Entity
@Table(name="user")
public class User implements java.io.Serializable {
private String userId;
private String username;
private String password;
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid.hex")
@Column(name="USER_ID", unique=true, nullable=false)
public String getUserId() {
return userId;
} public void setUserId(String userId) {
this.userId = userId;
}
@Type(type = "EncryptType")
@Column(name="USERNAME")
public String getUsername() {
return username;
} public void setUsername(String userName) {
this.username = userName;
}
@Type(type = "EncryptType")
@Column(name="PASSWORD")
public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
}
}
public class EncryptType implements UserType { public Object assemble(Serializable cached, Object owner) throws HibernateException {
return null;
} public Object deepCopy(Object value) throws HibernateException { if (value == null) {
return null;
} else {
return new String((String) value);
}
} public Serializable disassemble(Object value) throws HibernateException { return null; } public boolean equals(Object x, Object y) throws HibernateException { return (x == y) || (x != null && y != null && (x.equals(y))); } public int hashCode(Object x) throws HibernateException {
return x.hashCode();
} public boolean isMutable() {
return false;
} public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {//Get bin data from database then decrypt to String byte[] data = rs.getBytes(names[0]); return Encryption.getInstance().decrypt(data); } public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException { if (value == null) {
return;
}
//Encrypt String to bin data byte data[] = Encryption.getInstance().encrypt(value.toString());
st.setBytes(index, data);
} public Object replace(Object original, Object target, Object owner) throws HibernateException {
return null;
} public Class returnedClass() {
return java.lang.String.class;
} public int[] sqlTypes() {
return new int[] { Types.BINARY };
}
}
public class Encryption { private Cipher en;
private Cipher de; public byte[] encrypt(String s) { try {
byte[] data = s.getBytes();
if (data.length % 8 != 0) {
int length = 8 - data.length % 8;
byte[] spaces = new byte[length];
for (int i = 0; i < spaces.length; i++) {
spaces[i] = 0x20;
}
data = ArrayUtils.addAll(data, spaces);
}
return en.doFinal(data); } catch (Exception e) {
throw new RuntimeException(e);
}
} public String decrypt(byte[] b) { try {
byte[] data = de.doFinal(b);
return new String(data).trim();
} catch (Exception e) {
throw new RuntimeException(e);
} } private Encryption() { try {
DESKeySpec deskey = new DESKeySpec("X009我要理财".getBytes());
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
SecretKey key = skf.generateSecret(deskey);
IvParameterSpec iv = new IvParameterSpec(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 });
en = Cipher.getInstance("DES/CBC/NoPadding");
en.init(Cipher.ENCRYPT_MODE, key, iv);
de = Cipher.getInstance("DES/CBC/NoPadding");
de.init(Cipher.DECRYPT_MODE, key, iv); } catch (Exception e) {
throw new RuntimeException(e);
}
} private static Encryption instance = new Encryption(); public static Encryption getInstance() { return instance; }
}数据库CREATE TABLE `user` (
`user_id` varchar(32) NOT NULL DEFAULT '',
`USERNAME` varbinary(128) DEFAULT NULL,
`PASSWORD` varbinary(128) DEFAULT NULL,
PRIMARY KEY (`user_id`)
)
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货