使用JPA,我希望能够将BitSet保存到数据库并将其拉回到程序中.

假设我有:

@Entity
@Table(name = "myTable")
public class MyClass {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "Object_Id")
    protected long id;

    @Column(name = "Tags")
    protected BitSet tags;

... getters & setters etc...
}

还应该定义“columnDeFinition”吗?我真的不明白它是如何持久的(使用toString()?)而且它是如何从数据库中加载回来的.

你能帮帮我一下吗?

谢谢!

解决方法

默认情况下,JPA使用Java序列化来保存未知Serializable类型的属性(以便将序列化表示存储为byte []).

通常它不是您想要的,因为可以有更有效的方式来表示您的数据.例如,BitSet可以有效地表示为数字(如果它的大小有界),或者byte [],或其他东西(遗憾的是,BitSet不提供进行这些转换的方法,因此您需要手动实现它们).

当您确定要在数据库中拥有哪些数据表示时,您需要告知JPA应用必要的转换.有两种选择:

>在getter和setter中实现转换.例如,如下:

@Entity
@Table(name = "myTable")
@Access(Accesstype.FIELD)
public class MyClass {
    ...
    @Transient // Do not store this field
    protected BitSet tags;

    @Access(Accesstype.PROPERTY) // Store the property instead
    @Column(name = "Tags")
    byte[] getTagsInDbRepresentation() {
        ... // Do conversion
    }

    void setTagsInDbRepresentation(byte[] data) {
        ... // Do conversion
    }
    ...
}

>使用特定于提供程序的扩展来隐式执行转换(例如,在Hibernate中为custom types).此方法允许您在不同实体中重用类型转换逻辑.

将java BitSet保存到DB的更多相关文章

  1. 使用BitSet位集合,一个重复校验工具

    这篇文章主要介绍了使用BitSet位集合,一个重复校验工具,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  2. 是否可以在Java中声明一个1位变量?

    我的算法使用了一个庞大的布尔数组,正如我所教导的,每个布尔变量需要1个字节.无论如何都要声明一个布尔数组并减少内存使用量,因为我正在处理手机环境.编辑:我的朋友和我正在讨论BitSet是否比普通布尔数组慢.请澄清一下.该算法仍然需要性能作为最佳需求.解决方法BitSetThisclassimplementsavectorofbitsthatgrowsasneeded.Eachcomponentof

  3. c – 矢量上的按位运算

    对矢量执行按位操作的最佳方式是什么?据我所知,向量是一个专用化,每个布尔值使用一个位.我选择了矢量为了节省内存的原因.我知道矢量有一些问题但是对于我的需要,这是适当的.现在–对整个这样的载体进行逐位操作最有效的方法是什么?如果我在一个for循环中执行它,并读出每个单独的bool并将其存储回来,我理解它的方式在里面执行更多的操作,以访问实际值.谢谢!

  4. c – 将字节数组转换为Bitset

    我有一个由随机数生成器生成的字节数组.我想把它放到STLbitset中.不幸的是,看起来Bitset只支持以下构造函数:>1和0的字符串,如“10101011”>一个无符号长.我现在能想到的唯一解决方案是逐位读取字节数组并生成1和0的字符串.有没有人有更有效的解决方案?解决方法像这样的东西?

  5. c – XOR 128位位组

    我试图XOR拖曳128位位组.我得到的输出是前64位为0,后64位为XOR.我也收到编译器警告有没有办法XOR128位位集或我需要创建一个丑陋的黑客?解决方法您的问题不是异或,而是从常量初始化位集.正如警告所说,整数常量可以有一个限制,std::bitset构造函数采用无符号longlong,通常为64位长.您可以从二进制字符串初始化位集:或者将它与两个64位位组合在一起:

  6. 在c中使用bitset容器

    问题出在哪里?

  7. C 11和[17.5.2.1.3]位掩码类型

    标准允许在整数类型,枚举和std::bitset之间进行选择.在给定这些选择的情况下,为什么库实现者会使用其中一个?

  8. c – 霍夫曼编码

    我正在尝试实现压缩的霍夫曼算法,这需要将可变长度的位写入文件.在C中是否有任何方法可以将具有1位粒度的可变长度数据写入文件?解决方法不,您可以写入文件的最小数据量是一个字节.您可以使用bitset来简化操作位,然后使用ofstream写入文件.如果您不想使用bitset,可以在保存数据之前使用bitwiseoperators来操作数据.

  9. c – 为什么std :: bitset的位是相反的顺序?

    2为什么bitset以相反的顺序存储位?经过多次训练,我终于写了这个binary_to_dec.可以简化吗?

  10. 将位域转换为int

    我有这样一种方式:我也有int数组,我想从这个数组中获取int值,表示这个位字段的实际值.非常感谢.解决方法你可以使用联合:或者你可以使用一个演员:或者你可以使用联合中的匿名结构:

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部