当我使用hbm.xml和annotation来配置相同的数据时,为什么hbm.xml配置后面是hibernate?

时间:2014-04-06 16:38:11

标签: xml hibernate configuration hbm

提前多多感谢。 :) 我正在使用Hibernate 4.3.5。我写了一个Hibernate应用程序。我在hbm.xml文件中配置了表名和其中一个列的名称以及使用注释。当我运行应用程序时,创建的表具有在hbm.xml文件中设置的属性。在我看来,它应该使用注释,它可能是为了向后兼容,但如果我有一个遗留的hibernate应用程序有hbm文件,现在我决定使用注释来覆盖现有的hbm.xml配置怎么办? 这是我的代码。 我的实体类

package com.infinite.entity;

import javax.persistence.Column;
import javax.persistence.Table;

import org.hibernate.annotations.Entity;

@javax.persistence.Entity
@Table(name="ANNOTATION_USER")
public class User {
private int userId;

@Column(name="ANNOTATION_FIRSTNAME")
private String firstName;
String lastName, city, country;
public int getUserId() {
    return userId;
}
public void setUserId(int userId) {
    this.userId = userId;
}
public String getFirstName() {
    return firstName;
}
public void setFirstName(String firstName) {
    this.firstName = firstName;
}
public String getLastName() {
    return lastName;
}
public void setLastName(String lastName) {
    this.lastName = lastName;
}
public String getCity() {
    return city;
}
public void setCity(String city) {
    this.city = city;
}
public String getCountry() {
    return country;
}
public void setCountry(String country) {
    this.country = country;
}


}

我的User.hbm.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 27 Feb, 2014 8:38:13 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="com.infinite.entity.User" table="HBM_USER">
        <id name="userId" type="int">
            <column name="USERID" />
            <generator class="native" />
        </id>
        <property name="firstName" type="java.lang.String">
            <column name="HBM_FIRSTNAME" />
        </property>
        <property name="lastName" type="java.lang.String">
            <column name="LASTNAME" />
        </property>
        <property name="city" type="java.lang.String">
            <column name="CITY" />
        </property>
        <property name="country" type="java.lang.String">
            <column name="COUNTRY" />
        </property>
    </class>
</hibernate-mapping>

我的申请文件

package com.infinite.entity;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class Test {

    public static void main(String[] args) {

        User user= new User();
        user.setCity("Dewas");
        user.setCountry("india");
        user.setFirstName("SGN");
        user.setLastName("Jai ho");
        user.setUserId(100);
        // TODO Auto-generated method stub
Configuration configuration=new Configuration();
configuration=configuration.configure();
SessionFactory factory=configuration.buildSessionFactory();
Session session=factory.openSession();
Transaction transaction= session.beginTransaction();
session.save(user);
//user.setCountry("Australia");

transaction.commit();
session.close();
    }

}

最后输出(生成查询)

Hibernate: 
    insert 
    into
        HBM_USER
        (HBM_FIRSTNAME, LASTNAME, CITY, COUNTRY) 
    values
        (?, ?, ?, ?)

1 个答案:

答案 0 :(得分:1)

而不是

配置配置=新配置();

使用

配置配置= new AnnotationConfiguration()

这将优先考虑注释。