【问题标题】:How to not have to specify Hibernate mapping如何不必指定 Hibernate 映射
【发布时间】:2016-10-18 01:54:21
【问题描述】:

我有一个使用注释的工作休眠设置

@Entity
@Table(name="Users")
public class User implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="USER_ID")
    private int id = 0;

    @Column(name="EMAIL")
    private String email = "";

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="CREATED")
    private Date created = null;

    public User(){
        Calendar cal = Calendar.getInstance();
        this.created = cal.getTime();
    }

    public User(int id, String email, Date created) {
        this.id = id;
        this.email = email;
        this.created = created;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public Date getCreated() {
        return created;
    }

    public void setCreated(Date created) {
        this.created = created;
    }

    @Override
    public String toString() {
        return "centaurus.hib.User{" +
                "id=" + id +
                ", email='" + email + '\'' +
                ", created=" + created +
                '}';
    }
}

要完成这项工作,我必须在我的 hibernate.cfg.xml 文件中有一个条目(以及其他条目)

<mapping class="centaurus.hib.User"/>

否则休眠会抛出错误,说它没有映射文件。

或者,当我创建持久会话工厂时,我可以指定要映射的类。

问题是,在我从事过的其他项目中,我只需要添加一个类并正确注释它,hibernate 就可以使用它。这是我想做但不知道如何做的。除了带注释的类之外,我不想在我的休眠配置中有一个类列表。

【问题讨论】:

  • 您可以在您的休眠属性中使用注释驱动,并对您的类包进行组件扫描,然后您只需使用一对一、一对多等映射来驱动您的类。
  • 你试过纯JPA方式吗?不是休眠特定的东西,只能使用persistence.xml?

标签: java hibernate


【解决方案1】:

如果您手动连接 Hibernate 并调用 Configuration#addAnnotatedClass(Class&lt;?&gt;),也可以使用 Hibernate Configuration 类。

【讨论】:

  • 我目前使用配置类来插入我的凭据,因为我不希望它们在 xml 文件中,我仍然将 xml fire 用于其他选项。但这个想法是删除每个类的重复,而不是仅仅将它从 xml 文件移动到 sessionfactory 创建类,本质上我正在寻找一种休眠或 java(不是春天)的方式来表达“在 xy.xml 中包含所有带注释的类。 z 包”
  • afaik,你必须自己写。
【解决方案2】:

如果您将 Spring 用于会话工厂,则可以指定“packagesToScan”属性。

<property name="packagesToScan" value="com.xyz.model" />

【讨论】:

  • 不使用spring,使用restx,这是要扫描的包特定于spring吗?看起来是这样的
猜你喜欢
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 2014-10-13
  • 1970-01-01
相关资源
最近更新 更多