我在我的Item实体中有一个字段 – expiryLimit,我想到了使用joda-time Period,这是一个适合在这里使用的类型.
只是为了解释 – expiryLimit是年,月,日或任何持续时间的数量,在此之后特定项目将到期并使用我可以计算给定deliveryDate的项目的确切expiryDate.
现在我遇到的问题是找到一种将这种类型映射到JPA的合适方法.
是否有任何可用的API或第三方库提供了一些注释来执行此操作?我还使用Eclipse Link @Converter注释将DateTime与MySQL TimeStamp映射.所以,我还需要和Period做同样的事吗.如果是,那么我应该将它转换为什么类型.要varchar?还是长?或其他适合代表期间的类型.
最佳答案
好的,最后我通过仅使用EclipseLink @Converter解决了这个问题.这就是我做到的.我也欢迎任何评论: –
Itemmaster实体: –
public class Itemmaster {
@Converter(
name="periodConverter",converterClass = com.joda.converter.PeriodConverter.class
)
@Convert("periodConverter")
@Column(name = "expiry_limit",length = 2000)
private Period expiryLimit;
/** Constructors **/
public Period getExpiryLimit() {
return expiryLimit;
}
public void setExpiryLimit(Period expiryLimit) {
this.expiryLimit = expiryLimit;
}
}
PeriodConverter.class: –
public class PeriodConverter implements Converter {
private Logger log;
private static final long serialVersionUID = 1L;
@Override
public Object convertDataValuetoObjectValue(Object str,Session session) {
if (str == null) {
log.info("convertDataValuetoObjectValue returning null");
return null;
}
return new Period(str);
}
@Override
public Object convertObjectValuetoDataValue(Object period,Session session) {
/** str format should be: - `PyYmMwWdDThHmMsS` **/
if (period == null) {
log.info("convertObjectValuetoDataValue returning null");
return null;
}
return period.toString();
}
@Override
public void initialize(DatabaseMapping mapping,Session session) {
log = Logger.getLogger("com.joda.converter.PeriodConverter");
((AbstractDirectMapping) mapping).setFieldType(java.sql.Types.VARCHAR);
}
@Override
public boolean isMutable() {
return true;
}
}
原文地址:https://www.jb51.cc/mysql/433114.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。