📄 monetaryamountsimpleusertype.java
字号:
package org.hibernate.auction.persistence;
import net.sf.hibernate.*;
import org.hibernate.auction.model.*;
import org.hibernate.auction.user.UserSession;
import java.math.BigDecimal;
import java.sql.*;
import java.util.Currency;
/**
* This is a simple Hibernate custom mapping type for MonetaryAmount value types.
* <p>
* Note that this mapping type is for legacy databases that only have a
* single numeric column to hold monetary amounts. Every <tt>MonetaryAmount</tt>
* will be converted to USD (using some conversion magic of the class itself)
* and saved to the database. Every value read from the database will be
* converted to the currency prefered by the current user (UserSession thread local).
*
* @author Christian Bauer <christian@hibernate.org>
*/
public class MonetaryAmountSimpleUserType
implements UserType {
private static final int[] SQL_TYPES = {Types.NUMERIC};
public int[] sqlTypes() { return SQL_TYPES; }
public Class returnedClass() { return MonetaryAmount.class; }
public boolean isMutable() { return false; }
public Object deepCopy(Object value) {
return value; // MonetaryAmount is immutable
}
public boolean equals(Object x, Object y) {
if (x == y) return true;
if (x == null || y == null) return false;
return x.equals(y);
}
public Object nullSafeGet(ResultSet resultSet,
String[] names,
Object owner)
throws HibernateException, SQLException {
if (resultSet.wasNull()) return null;
BigDecimal valueInUSD = resultSet.getBigDecimal(names[0]);
Currency userCurrency =
(Currency) UserSession.get("currency");
return new MonetaryAmount(valueInUSD, userCurrency);
}
public void nullSafeSet(PreparedStatement statement,
Object value,
int index)
throws HibernateException, SQLException {
if (value == null) {
statement.setNull(index, Types.NUMERIC);
} else {
MonetaryAmount anyCurrency = (MonetaryAmount)value;
MonetaryAmount amountInUSD =
MonetaryAmount.convert( anyCurrency,
Currency.getInstance("USD") );
statement.setBigDecimal(index, amountInUSD.getValue());
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -