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();

你可能感兴趣的:(hibernate annoation (四 lob))