Использование hibernate3 с существующими таблицами

#java #hibernate #mapping

#java #переход в спящий режим #сопоставление

Вопрос:

Как я могу настроить Hibernate, чтобы он отображал компоненты в некоторые существующие таблицы?

P.S: Каждая таблица должна соответствовать объекту.

Редактировать: Вот как я использовал Hibernate с автоматически сгенерированными таблицами (взятыми из веб-приложения). Мне все еще не ясно, как осуществить переход к некоторому явному отображению.

Пример компонента Entity

 @Entity
@Table(name = "t1_category")
// PK is replaced by Long
// See generic definition in abstract class
public class Category extends BaseEntity<Long> {

    @Column(name="check_rsv")
    private String check;

    @Column(unique = true)
    private String name;
    private static final long serialVersionUID = 1L;

    public String getCheck() {
        return this.check;
    }

    public void setCheck(String check) {
        this.check = check;
    }   
    public String getName() {
        return this.name;
    }

    public void setName(String title) {
        this.name = title;
    }

}
  

ApplicationContext.xml/Spring

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:jee="http://www.springframework.org/schema/jee"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

    <context:annotation-config />
    <context:component-scan base-package="***" />


    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="myPersistenceUnit" />
    </bean>

    <!-- Transaction manager for a single JPA EntityManagerFactory (alternative to JTA) -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" 
            p:entityManagerFactory-ref="entityManagerFactory"/>

    <tx:annotation-driven/> <!-- This apparently scans for annotations from the base-package value -->
</beans>
  

Persistence.xml

 <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="myPersistenceUnit">

    <provider>org.hibernate.ejb.HibernatePersistence</provider>

        <properties>
            <property name="hibernate.archive.autodetection" value="class"/>

          <property name="hibernate.connection.url"
                    value="jdbc:mysql://localhost:3306/***?autoReconnect=true"/>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.connection.password" value="***"/>
            <property name="hibernate.connection.username" value="***"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>

            <property name="hibernate.hbm2ddl.auto" value="validate"/>

            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.use_sql_comments" value="true"/>
        </properties>
    </persistence-unit>
</persistence>
  

Комментарии:

1. То, что вы хотите, может быть сделано с помощью функций обратного проектирования Hibernate Tools. Взгляните сюда — docs.jboss.org/tools/3.2.0.GA/en/hibernatetools/html_single /…

Ответ №1:

(Что вы имеете в виду под «заполняет»? Сопоставить компоненты с таблицами? Затем:)

Старый способ: создать режим гибернации *.hbm.xml для каждой таблицы / объекта. Ничего экстраординарного, делал это в прошлом.

Новый способ: создайте компоненты, пометьте их аннотациями Hibernate.

Новый способ: используйте аннотации JPA для переносимого отображения и Hibernate в качестве реализации JPA.

Ответ №2:

Аннотации Hibernate позволяют указывать имена таблиц и столбцов. Я добавляю параметр размера пакета и кэша в качестве дополнительного, но это не требуется для вашего вопроса.

 @Entity
@Table(name="BLAH")
@BatchSize(size=20)
@Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL)
public class Blah{

   @Id
   protected String theID;

   @Column(name="MEH")
   protected int meh;
}
  

Взгляните на все опции в @Table @Column @Index и @JoinColumn на опцию «один ко многим» и др. взаимосвязи.