java - 将 java BitSet 保存到数据库

标签 java jpa persistence bitset

使用 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()?),而且它是如何从数据库中加载回来的。

你能帮我解决这个问题吗?

谢谢!

最佳答案

更有效的方法(使用 int 而不是 byte[])需要一个非常简单的自定义类:

@Entity
@Access(AccessType.FIELD)
public class SampleEntity {

    @Transient
    private IntBitSet isolationLevel = new IntBitSet(0);

    public static final int USER_BIT = 0;
    public static final int DEVICE_BIT = 1;
    // 2, 3, 4, ...

    public boolean isUserIsolated() {
        return isolationLevel.bitGet(USER_BIT);
    }

    public boolean isDeviceIsolated() {
        return isolationLevel.bitGet(DEVICE_BIT);
    }

    public void setUserIsolated(boolean b) {
        isolationLevel.bitSet(USER_BIT, b);
    }

    public void setDeviceIsolated(boolean b) {
        isolationLevel.bitSet(DEVICE_BIT, b);
    }

    @Access(AccessType.PROPERTY)
    @Column
    public int getIsolationLevel() {
        return isolationLevel.getValue();
    }

    public void setIsolationLevel(int isolationLevel) {
        this.isolationLevel = new IntBitSet(isolationLevel);
    }

    private static class IntBitSet {
        private int value;

        public IntBitSet(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }

        public boolean bitGet(int i) {
            return ((value >> i) & 1) == 1;
        }

        public void bitSet(int i, boolean b) {
            if (b) {
                bitSet(i);
            } else {
                bitUnset(i);
            }
        }
        private void bitSet(int i) {
            value = value | (1 << i);
        }
        private void bitUnset(int i) {
            value = value & ~(1 << i);
        }
    }
}

关于java - 将 java BitSet 保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12390068/

相关文章:

java - 解决存储库中一对一关系的正确方法?

Java - 处理层次结构

ruby-on-rails - 如何保持 Ruby on Rails 混合集群和 Tomcat 服务器之间的 session ?

tomcat - 使用 Tomcat/Scala 保持状态的最佳方式?

java - 为什么 getSystemCpuLoad() 返回负值

java - android studio 加载图像大小的两倍

java - Android - 我如何重新启动自己运行的应用程序,并且需要自行重新启动?

java - 如何使用模式匹配器仅获取与 Java 中的正则表达式匹配的第一行?

java - Inject 2 Data sources into spring+hibernate application always throw no transaction is in progress 错误

java - 在运行时配置实体