我有Picture
:
public class Picture implements java.io.Serializable {
private byte[] picEncoded;
private String Name;
//etc
是否可以将byte[]
移动到另一个类而不在db中创建物理上分离的表?我需要使用一些继承策略吗?
修改
Blob在单独的实体中:
POJO :
public class PictureBlob implements java.io.Serializable {
private Integer pictureBlobId;
private byte[] blob;
HBM::
<class name="PictureBlob" table="PICTURE">
<id name="pictureBlobId" type="int">
<column length="200" name="PictureID"/>
</id>
<property name="blob" type="byte[]" insert="false" update="false">
<column name="PicEncoded" not-null="false"/>
</property>
</class>
照片:
HBM::
<one-to-one class="PictureBlob" constrained="true" name="pictureBlob" fetch="select"/>
如何插入新图片?
PictureBlob pictureBlob= new PictureBlob();
pictureBlob.setBlob(new byte[]{84,32,22});
Picture p = new Picture();
p.setPictureBlob(pictureBlob);
session.save(p);
在blob值为null的位置插入记录。
答案 0 :(得分:4)
是否可以在不创建的情况下将byte []移动到另一个类 在db?
中物理分隔表
使用组件映射创建Picture和PictureBlob之间的组合关系。例如:
<hibernate-mapping>
<class name="Picture" table="PICTURE">
<id name="pictureId" type="int">
<generator class="native" />
</id>
<component name="pictureBlob " class="PictureBlob" lazy="no-proxy">
<property name="pictureBlobId" column="PictureID" type="int" length="200" />
<property name="blob" type="byte[]" insert="false" update="false"column="PicEncoded"/>
</component>
</class>
</hibernate-mapping>
POJO
public class Picture implements java.io.Serializable {
private int pictureId;
private PictureBlob pictureBlob;
//Setters & Getters
}
public class PictureBlob implements java.io.Serializable {
private int pictureBlobId;
private byte[] blob;
//Setters & Getters
}
另请注意:
使用
lazy="true"
和映射以启用延迟 加载单个标量值类型的属性(有点异国情调 案件)。需要编译持久性的字节码检测 用于注入拦截代码的类。可以覆盖 具有FETCH所有属性的HQL。对单值关联使用
lazy="no-proxy"
以启用延迟 在不使用代理的情况下获取。需要字节码检测 用于注入拦截代码。对集合使用
lazy="extra"
进行“智能”收集行为,即 一些收集操作,如size(), contains(), get(),
等 不会触发集合初始化。这只是非常明智的 大集合。
See here for more info. on fetching strategies
<强>编辑。强>
答案 1 :(得分:3)
如果您对使用注释而不是hbm感兴趣,可以查看这些
http://docs.oracle.com/javaee/6/api/javax/persistence/Embeddable.html,这将完全解决您的目的。
答案 2 :(得分:1)
我认为你可以使用这样的东西:
<class name="Picture">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<component name="pictureBlob" class="PictureBlob">
<property name="pictureBlobId"/>
<property name="blob"/>
<property name="picture"/>
</component>
</class>
这可能需要一些edititng,但想法是这样的:
你有一个Picture
课程。此类具有name
类型的属性pictureBlob
和属性PictureBlob
。
component
标记表示组件内的属性映射到与Picture
相同的表