EJB3 XML映射文件
Hibernate EntityManager的最新版本(3.1.0 beta8)现在支持EJB3 XML映射文件(即部署描述符)。虽然注解被视为开发易用性和生产力的巨大进步,但有些人仍然关注将元数据与代码分离的能力。现在,在Hibernate Annotations(3.1.0 beta 10)和Hibernate EntityManager中以标准方式支持。您可以部分覆盖Java注解,或者可以通过XML编写所有元数据。最简单的解决方案是在您的ejb-jar或persistence jar中添加META-INF/orm.xml。此文件将被持久化提供程序自动考虑。或者,您可以在persistence.xml文件中添加一个<mapping-file/>元素。以下是一个EJB3 XML文件的示例
<?xml version="1.0" encoding="UTF-8"?> <entity-mappings xmlns="[=>http://java.sun.com/xml/ns/persistence/orm]" [=>xmlns:xsi=]"=>http://www.w3.org/2001/XMLSchema-instance" [=>xsi:schemaLocation=]"=>http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd" version="1.0"> <package>org.hibernate.test</package> <entity class="Car" metadata-complete="true" access="PROPERTY"> <table name="CARS"/> <named-query name="carsByManufacturer"> <query>select c from Car c where c.manufacturer = :manufacturer</query> <hint name="org.hibernate.timeout" value="200"/> </named-query> <attributes> <id name="id"> <generated-value strategy="AUTO"/> <column name="car_id"/> </id> <basic name="category" optional="false"> <enumerated>STRING</enumerated> </basic> <many-to-one name="manufacturer"> <join-column name="manufacturer_fk"/> </one-to-many> </attributes> </entity> </entity-mappings>
Glassfish集成
我已经与Glassfish团队合作了一段时间,以确保Hibernate EntityManager与Glassfish集成良好。现在,随着规范已经冻结,集成工作进展非常顺利
- 下载 Glassfish b43及更高版本
- 下载 Hibernate Core (对于HEM 3.1.0 beta 8,您需要Hibernate 3.2 CR1)
- 将所需的hibernate(和第三方库)复制到$glassfish_home/lib
- 调整您的persistence.xml文件以使用Hibernate EntityManager
<persistence version="1.0"> <persistence-unit name="pu"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <!-- JNDI name of the database resource to use --> <jta-data-source>jdbc/sqlserver</jta-data-source> <properties> <!-- drop and create tables at deployment if needed --> <property name="hibernate.hbm2ddl.auto" value="create-drop"/> </properties> </persistence-unit> </persistence>
这就完成了!Glassfish设置了适当的Transaction Manager Strategy,Hibernate可以猜测大多数常见数据库的正确方言。
Hibernate EntityManager已知可以在所有最新的EJB3实现中运行。当然,它在JBoss EJB3 和JBoss Embeddable EJB3 中运行得很好。
映射映射
这是一个长期请求的功能,现在它已经可用,您可以使用以下内容来映射关联Map<Element, ...>或Map<Embeddable, ...>使用显式键列(多列)