使用@LOB和jasypt @Type注释时生成的模式的Hibernate问题

时间:2015-06-04 19:15:28

标签: java hibernate jpa encryption jasypt

我正在使用以下

package org.temp

import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
import org.jasypt.hibernate4.type.EncryptedStringType;


import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;


@TypeDef(
        name="encryptedString",
        typeClass=EncryptedStringType.class,
        parameters= {
                @Parameter(name="encryptorRegisteredName", value="defaultStringEncryptor")
        }
)


@Entity
@Table(name = "MESSAGE")
public class MessageEntity {

  @Id
  @Column(name = "MESSAGE_ID", nullable = false)
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MESSAGE_ID_SEQ")
  @SequenceGenerator(name = "MESSAGE_ID_SEQ", sequenceName = "MESSAGE_ID_SEQ", allocationSize = 1,
      initialValue = 1)
  private BigInteger messageId;

  @Column(name = "SUBJECT")
  private String subject;

  @Type(type="encryptedString")
  @Lob
  @Column(name = "CONTENT")
  private String content;

...
}

意图是加密内容,以便任何人查询数据库,他们将看不到存储在“内容”列中的数据。哪一切都很好,但是......

在添加@Type(type =“encryptedString”)

之前

在生成的架构中,我得到了这个

create table MESSAGE (
    MESSAGE_ID number(19,2) not null,
    CONTENT clob,
    SUBJECT varchar2(255),
    primary key (MESSAGE_ID)
);

但是当我添加@Type(type =“encryptedString”)

create table MESSAGE (
    MESSAGE_ID number(19,2) not null,
    CONTENT varchar2(255),
    SUBJECT varchar2(255),
    primary key (MESSAGE_ID)
);

使用hibernate 4.1.3.Final,jasypt 1.9.2

我一直在挖掘和研究如何正确注释但没有运气

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决这个问题的方法。对Hibernate来说有点新鲜,所以错过了这个选项。

基本上放弃了

@lob

并更新了以下内容:

@Column(name = "CONTENT", columnDefinition = "CLOB")

准备使用" TEXT"为了提高效率,但项目的要求表明该领域应该能够保存大量数据。