ID #9573

hibernate annoation (四 lob)

hiberante sql映射对应

Java数据类型 Hibernate数据类型 标准SQL数据类型

(PS:对于不同的DB可能有所差异)

byte、java.lang.Byte byte TINYINT
short、java.lang.Short short SMALLINT
int、java.lang.Integer integer INGEGER
long、java.lang.Long long BIGINT
float、java.lang.Float float FLOAT
double、java.lang.Double double DOUBLE
java.math.BigDecimal big_decimal NUMERIC
char、java.lang.Character character CHAR(1)
boolean、java.lang.Boolean boolean BIT
java.lang.String string VARCHAR
boolean、java.lang.Boolean yes_no CHAR(1)('Y'或'N')
boolean、java.lang.Boolean true_false CHAR(1)('Y'或'N')
java.util.Date、java.sql.Date date DATE
java.util.Date、java.sql.Time time TIME
java.util.Date、java.sql.Timestamp timestamp TIMESTAMP
java.util.Calendar calendar TIMESTAMP
java.util.Calendar calendar_date DATE
byte[] binary VARBINARY、BLOB
java.lang.String text CLOB
java.io.Serializable serializable VARBINARY、BLOB
java.sql.Clob clob CLOB
java.sql.Blob blob BLOB
java.lang.Class class VARCHAR
java.util.Locale locale VARCHAR
java.util.TimeZone timezone VARCHAR
java.util.Currency currency VARCHAR

一,针对大字段也就是 colb,blob

在hibernate annoation里面可以如下使用:

 @Lob 
 public String getC() {
 return c;
 } 
 @Lob 
 public byte[] getB() {
 return b;
 }

java.sql.Clob, Character[], char[] and java.lang.String 会被映射为 Clob. java.sql.Blob, Byte[], byte[] and serializable 会被映射为Blob.

当然我们可以使用正对不同的数据库使用数据库原始类型例如 mysql:使用@Column   (columnDefinition="longtext")(不推荐使用这种 防止有些数据库的对clob和blob的不支持)

对blob也可以不进行任何注释但是在使用的时候会有预想不到的错误 例如 mysql 他会映射为TINYBLOB 其容量为 256 字节  如果加上lob注释 则映射为LONGBLOB 容量为4g,可想而知 相见我的利益篇文章:

http://ericjoe.javaeye.com/admin/blogs/443623

则可以映射为数据库对应的clob内省或者blob内型 例如(mysql:b longblob, c longtext);

存取的时候clob就可以按照string类型来处理 而blob可以以流的形式来处理 例如:

存的时候:

BufferedInputStream in = new BufferedInputStream(new FileInputStream(
  new File("d:\\19204.jpg")));
 byte[] b = new byte[in.available()];
 in.read(b);
bean.setB(b);
in.close();

读取:

Session session = HibernateSessionFactory.getSession();
 User user = (User)session.get(User.class, 1);
 byte[] b = user.getB();
 BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(
  new File("d:\\192041.jpg")));
 out.write(b);
 out.close();


2011-07-02 10:55
阅读:
I'm VC , Just U know Y
本站部分文章来源于互联网,版权归原作者所有。

延伸阅读:

不用spring,hibernate超傻瓜JAVA开发(javabean+数组)

SSH常见问题分析

Java和.NET继续争斗的四大相关问题

Hibernate 之父:是时候升级到Java EE 6了

Java和.NET继续争斗的四大相关问题