hibernate中的实体名以及动态实体dynamic models

这篇博客探讨了Hibernate中实体命名与动态实体的概念。通常,我们在使用Hibernate时会创建POJO实体类来操作数据库。动态实体允许我们在运行时创建和使用不同的实体模型,提供更大的灵活性。

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

hibernate使用Session对数据库进行增删改查,我们一般会定义一个 POJO实体类,然后通过类似下面的代码,操作实体。

Session session = sessionFactory.openSession();
Student stu = (Student)session.get(Student.class, 1);


session.get还提供了另外一个版本的方法:public Object get(String entityName, Serializable id),这个版本要求我们传递实体名称和实体主键。
Session session = sessionFactory.openSession();
Student stu = (Student)session.get("net.aty.Student", 1);


上面这2端代码是等效的,都可以正确地从数据库查询出id=1的student。对于POJO实体类来说,类的全限定名就是实体类的名称


什么是动态实体呢?hibernate的manual上写道:

Persistent entities do not necessarily have to be represented as POJO classes or as JavaBean objects at runtime. 
Hibernate also supports dynamic models (using Maps of Maps at runtime).
With this approach, you do not write persistent classes, only mapping files.


我们可以不用写实体类,而是使用Map来替代,Map比实体类具有更大的灵活性。在实体映射文件中,通过<class>元素的entity-name属性来设置实体名称。
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
	<class entity-name="aty_dynamic_model">
		<id name="id" type="long" column="ID">
			<generator class="native" />
		</id>
		<property name="name" column="NAME" type="string" />
		<property name="address" column="ADDRESS" type="string" />
	</class>
</hibernate-mapping>


配置好实体映射文件之后,就可以使用类似下面的代码来保存动态实体(其实就是个Map)。
Session session = sessionFactory.openSession();
session.beginTransaction();

Map<String, String> record = new HashMap<String, String>();
record.put("name", "aty");
record.put("address", "shenzhen");

session.save("aty_dynamic_model", record);

session.getTransaction().commit();
session.close();



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值