hibernate annoation (四 lob)

本文详细介绍了Java数据类型与Hibernate及标准SQL数据类型的映射关系,并重点讲解了大字段如CLOB和BLOB的处理方式及其在不同数据库中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hiberante sql映射对应

 

Java数据类型Hibernate数据类型标准SQL数据类型
(PS:对于不同的DB可能有所差异)
byte、java.lang.BytebyteTINYINT
short、java.lang.ShortshortSMALLINT
int、java.lang.IntegerintegerINGEGER
long、java.lang.LonglongBIGINT
float、java.lang.FloatfloatFLOAT
double、java.lang.DoubledoubleDOUBLE
java.math.BigDecimalbig_decimalNUMERIC
char、java.lang.CharactercharacterCHAR(1)
boolean、java.lang.BooleanbooleanBIT
java.lang.StringstringVARCHAR
boolean、java.lang.Booleanyes_noCHAR(1)('Y'或'N')
boolean、java.lang.Booleantrue_falseCHAR(1)('Y'或'N')
java.util.Date、java.sql.DatedateDATE
java.util.Date、java.sql.TimetimeTIME
java.util.Date、java.sql.TimestamptimestampTIMESTAMP
java.util.CalendarcalendarTIMESTAMP
java.util.Calendarcalendar_dateDATE
byte[]binaryVARBINARY、BLOB
java.lang.StringtextCLOB
java.io.SerializableserializableVARBINARY、BLOB
java.sql.ClobclobCLOB
java.sql.BlobblobBLOB
java.lang.ClassclassVARCHAR
java.util.LocalelocaleVARCHAR
java.util.TimeZonetimezoneVARCHAR
java.util.CurrencycurrencyVARCHAR

 

一,针对大字段也就是 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.iteye.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();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值