有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

需要java Hibernate映射吗?

我是Hibernate新手,我下载了一个示例Java应用程序,并对其进行了修改,使其更加有用。到目前为止,在我的应用程序中,我有两个db类,它们是在Java应用程序中定义的:Actor。爪哇和城市。JAVA 他们每个人都有一个。哈佛商学院。xml文件如下所示:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Jun 17, 2009 11:42:48 AM by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
    <class name="sakila.entity.Actor" table="actor" catalog="sakila">
        <id name="actorId" type="java.lang.Short">
            <column name="actor_id" />
            <generator class="identity" />
        </id>
        <property name="firstName" type="string">
            <column name="first_name" length="45" not-null="true" />
        </property>
        <property name="lastName" type="string">
            <column name="last_name" length="45" not-null="true" />
        </property>
        <property name="lastUpdate" type="timestamp">
            <column name="last_update" length="19" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

<hibernate-mapping>
    <class name="sakila.entity.City" table="city" catalog="sakila">
        <id name="cityId" type="java.lang.Short">
            <column name="city_id" />
            <generator class="identity" />
        </id>
        <property name="city" type="string">
            <column name="city" length="45" not-null="true" />
        </property>
        <property name="countryId" type="string">
            <column name="country_Id" length="45" not-null="true" />
        </property>
        <property name="lastUpdate" type="timestamp">
            <column name="last_update" length="19" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

到目前为止,这个应用程序运行得很好。但我的问题是,如果我需要更改我的应用程序,以便它能够处理数据库中数百个对象,如Actor和City,我需要定义所有映射文件吗?如果在编程时我不知道用户可能查询哪些db对象,我需要定义所有这些对象吗?这似乎是不可能的,所以我的问题是:是*。哈佛商学院。需要xml文件吗?在这种情况下,我需要编写一个应用程序,让用户查询他需要的任何对象,而我可能甚至不知道数据库中有什么,如何编写这样的应用程序?冬眠可以吗


共 (4) 个答案

  1. # 1 楼答案

    如果您的系统是如此动态,以至于您不知道用户将查询哪些表,那么我看不出您将如何将这些表映射到相应的POJO。Hibernate的主要重点是将模式中的表映射到Java应用程序中的对象,主要是通过Hibernate查询语言(HQL)或可用的编程API之一

    然而,在hibernate中使用直接SQL并返回非托管对象是可能的,尽管这在功能上比使用HQL或查询API要有限得多。要做到这一点,您将使用与以下类似的代码:

    createSQLQuery( "SELECT * FROM someTable" ).addTransformer(Transformers.aliasToBean(MyJavaClass.class));
    

    此转换器按名称将SQL查询中的列映射到指定POJO的属性。在实践中,类型转换是具有挑战性的。在许多情况下需要设置刻度。你也可以使用变压器。aliasToEntityMap,返回映射列表,其中每个映射都是列名到值的映射

    当前Hibernate核心文档的第18.1.5节简要介绍了这一点

  2. # 2 楼答案

    弗兰克*。哈佛商学院。xml文件不是必需的。Hibernate注释是不使用XML文件定义映射的最新方法。您可以在XML映射元数据之外使用注释,也可以使用注释替换XML映射元数据。就你而言

    @Entity
    @Table(name ="actor")
    public Class Actor
    {
        @Column(name = "actor_id")
        private Short actorId;
    
        @Column(name = "first_name")
        private String firstName;
    
        @Column(name = "last_name")
        private String lastName;
    
        @Column(name = "last_update")
        private Timestamp lastUpdate;
    }
    
    @Entity
    @Table(name ="city")
    public Class City
    {
        @Column(name = "city_id")
        private Short cityId;
    
        @Column(name = "city")
        private String city;
    
        @Column(name = "country_Id")
        private String countryId;
    
        @Column(name = "last_update")
        private Timestamp lastUpdate;
    }
    

    Hibernate注释将元数据与代码一起放入POJO java文件中,这有助于用户在开发过程中同时理解表结构和POJO

  3. # 4 楼答案

    嗯,数据库中要与Hibernate一起使用的每个表都需要在应用程序端定义实体。您可以通过xml配置文件或使用注释(我强烈建议,它更“用户友好”)来定义该实体。所以基本上你需要维持一对一的关系