2014-12-09 3 views
0

Я пишу проект Java, который использует Hibernate ORM и Spring Framework. Сейчас, когда я добавить класс POJO, мне нужно изменить мой hibernate.cfg.xml файл, который выглядит следующим образом:Как создать сопоставления Hibernate на основе аннотаций?

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <mapping class="somepackage.class1"/> 
     <mapping class="somepackage.class2"/> 
     <!-- etc. --> 
    </session-factory> 
</hibernate-configuration> 

Затем я создаю класс аннотаций на основе. Я слышал, что я мог бы избежать добавления сопоставлений каждого класса в hibernate.cfg.xml, если бы использовал соответствующие аннотации Hibernate. Как я могу изменить класс, чтобы избежать сопоставления в XML-файле? Вот мой пример POJO файл, порожденный NetBeans:

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package somepackage.pojo; 

import java.io.Serializable; 
import java.util.Collection; 
import javax.persistence.Basic; 
import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.NamedQueries; 
import javax.persistence.NamedQuery; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 
import javax.validation.constraints.NotNull; 
import javax.validation.constraints.Size; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlTransient; 

/** 
* 
* @author D 
*/ 
@Entity 
@Table(name = "ACCOUNT") 
@XmlRootElement 
@NamedQueries({ 
    @NamedQuery(name = "Account.findAll", query = "SELECT a FROM Account a"), 
    @NamedQuery(name = "Account.findByLogin", query = "SELECT a FROM Account a WHERE a.login = :login"), 
    @NamedQuery(name = "Account.findByPassword", query = "SELECT a FROM Account a WHERE a.password = :password")}) 
public class Account implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @Basic(optional = false) 
    @NotNull 
    @Size(min = 1, max = 100) 
    @Column(name = "LOGIN", nullable = false, length = 100) 
    private String login; 
    @Size(max = 128) 
    @Column(name = "PASSWORD", length = 128) 
    private String password; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "author") 
    private Collection<Comment> commentCollection; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "author") 
    private Collection<Article> articleCollection; 

    public Account() { 
    } 

    public Account(String login) { 
     this.login = login; 
    } 

    public String getLogin() { 
     return login; 
    } 

    public void setLogin(String login) { 
     this.login = login; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    @XmlTransient 
    public Collection<Comment> getCommentCollection() { 
     return commentCollection; 
    } 

    public void setCommentCollection(Collection<Comment> commentCollection) { 
     this.commentCollection = commentCollection; 
    } 

    @XmlTransient 
    public Collection<Article> getArticleCollection() { 
     return articleCollection; 
    } 

    public void setArticleCollection(Collection<Article> articleCollection) { 
     this.articleCollection = articleCollection; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (login != null ? login.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     // TODO: Warning - this method won't work in the case the id fields are not set 
     if (!(object instanceof Account)) { 
      return false; 
     } 
     Account other = (Account) object; 
     if ((this.login == null && other.login != null) || (this.login != null && !this.login.equals(other.login))) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return "somepackage.pojo.Account[ login=" + login + " ]"; 
    } 

} 

ответ

1

Я предлагаю вам экспортировать конфигурацию спящего режима в конфигурации пружинной из-за гибкости, что пружина обеспечивает. Ваша задача - не объявлять класс в конфигурации каждый раз, когда вы создаете новый объект. Используя конфигурацию пружины, вы можете сделать следующее. (Packagestoscan недвижимость)

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
      <property name="dataSource" ref="dataSource" /> 
      <property name="packagesToScan" value="org.baeldung.spring.persistence.model" /> 
      <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> 
       <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      </props> 
      </property> 
     </bean> 

Ref: http://www.javacodegeeks.com/2013/05/hibernate-3-with-spring.html

Смежные вопросы