加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

java – 使用Eclipse Link在JPA中映射Joda Time“Period”的注

发布时间:2020-12-11 23:47:13 所属栏目:MySql教程 来源:网络整理
导读:我在我的Item实体中有一个字段 expiryLimit,我想到了使用joda-time Period,这是一个适合在这里使用的类型. 只是为了解释 expiryLimit是年,月,日或任何持续时间的数量,在此之后特定项目将到期并使用我可以计算给定deliveryDate的项目的确切expiryDate. 现在我

我在我的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;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读