【发布时间】:2014-01-09 11:29:49
【问题描述】:
在java中使用hibernate,我们是否需要将所有java pojo字段映射到Database表列?或者我们可以只映射几个字段和几列?
【问题讨论】:
在java中使用hibernate,我们是否需要将所有java pojo字段映射到Database表列?或者我们可以只映射几个字段和几列?
【问题讨论】:
是的,您可以将 Pojo 类的几个字段映射到表格列。不是问题。它将成功地将数据存储在数据库中。
例子:
下面是StudentData Pojo
public class StudentData1 {
private String name;
private int id;
private String name1;
//setters & getters
}
还有HBM文件:
<class name="example.StudentData" table="StudentData">
<id name="id" column="pid" >
<generator class="assigned" />
</id>
<property name="name" column="pname" />
</class>
CFG文件是
<mapping resource="StudentData.hbm.xml"/>
主类是
public static void main(String[] args) {
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
Session session = factory.openSession();
StudentData1 s = new StudentData1();
s.setId(1);
s.setName("iPhone");
Transaction tx = session.beginTransaction();
session.save(s);
System.out.println("Object saved successfully.....!!");
tx.commit();
session.close();
factory.close();
}
你可以运行这段代码,它只会执行和存储两个字段。
【讨论】:
我假设您只想在数据库中保留类字段的子集。
您可以使用@Transient
注释以标记您不希望保留的字段。
警告:请务必注意这些字段可能未初始化(因为它们在加载时在数据库中没有值)
【讨论】:
我没有检查它,但我不明白为什么不能保留一些未映射的字段,尤其是如果它们不作为表中的列存在。 当然,在某些情况下,您需要将列映射到字段,例如当列不能为空时,保存时会出现异常。
【讨论】:
在休眠中,如果没有以任何其他方式描述,所有字段都将被映射。因此,人们可以指向 ORM 映射器,而不是使用
将给定字段映射到数据库 [@Transient][1] annotation in case JPA is used
or even the **transient** keyword from java - careful when using this one, it will prevent the given field to be serialized
【讨论】: