我正在使用以下
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
我一直在挖掘和研究如何正确注释但没有运气
答案 0 :(得分:0)
好的,我找到了解决这个问题的方法。对Hibernate来说有点新鲜,所以错过了这个选项。
基本上放弃了
@lob
并更新了以下内容:
@Column(name = "CONTENT", columnDefinition = "CLOB")
准备使用" TEXT"为了提高效率,但项目的要求表明该领域应该能够保存大量数据。