java - 线程中的异常 "main"org.hibernate.MappingException : could not instantiate id generator at org. hibernate.id.IdentifierGeneratorFactory.create

标签 java eclipse hibernate log4j

我是 Hibernate 框架的新手。我已经创建了一些代码来将数据存储在数据库中,但我无法存储它。它会抛出错误。

Exception in thread "main" org.hibernate.MappingException: could not instantiate id generator at org.hibernate.id.IdentifierGeneratorFactory.create

请告诉我如何解决这个问题?

我的目录结构在这里。

enter image description here

员工.java

package com.hib;

public class Employee {

private int id;
private String firstName, lastName;

public int getId() {
    return id;
}

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

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;
}

}

employee.hbm.xml

<?xml version='1.0' encoding='UTF-8'?>  
 <!DOCTYPE hibernate-mapping PUBLIC  
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.hib.Employee" table="emp1000">

    <id name="id">
        <generator class="assined"></generator>
    </id>

    <property name="firstName"></property>

    <property name="lastName"></property>


</class>

hibernate.cfg.xml

   <?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>

    <property name="hbm2ddl.auto">update</property>
    <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
    <property   name="connection.url">jdbc:oracle:thin:@localhost:1521:oracle12c</property>
    <property name="connection.username">AtulRai</property>
    <property name="connection.password">atulrai</property>
    <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    <mapping resource="employee.hbm.xml" />

</session-factory>

StoreData.java

  package com.hib;

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

public class StoreData {
public static void main(String[] args) {

    // creating configuration object
    Configuration cfg = new Configuration();
    cfg.configure("hibernate.cfg.xml");// populates the date of
                                        // configuration file

    // creating session object factory
    SessionFactory factory = cfg.buildSessionFactory();

    // creating session object

    Session session = factory.openSession();

    // creating transaction object
    Transaction t = session.beginTransaction();

    Employee e1 = new Employee();
    e1.setId(1111);
    e1.setFirstName("Atul");
    e1.setLastName("Rai");

    // persisting the object
    session.persist(e1);

    // transaction is commited
    t.commit();
    session.close();

    System.out.println("Data saved successfully");

}

}

以上都是我的代码,但是当我执行它时,出现以下错误

log4j:WARN No appenders could be found for logger      (org.hibernate.cfg.Environment).
  log4j:WARN Please initialize the log4j system properly.
 Exception in thread "main" org.hibernate.MappingException: could not instantiate id generator
   at    org.hibernate.id.IdentifierGeneratorFactory.create(IdentifierGeneratorFactory.java:98)
    at   org.hibernate.mapping.SimpleValue.createIdentifierGenerator(SimpleValue.java:152)
   at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:192)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1291)
at com.hib.StoreData.main(StoreData.java:17)
Caused by: org.hibernate.MappingException: could not interpret id generator strategy: assined
at org.hibernate.id.IdentifierGeneratorFactory.getIdentifierGeneratorClass(IdentifierGeneratorFactory.java:109)
at org.hibernate.id.IdentifierGeneratorFactory.create(IdentifierGeneratorFactory.java:92)
... 4 more

最佳答案

正如我在评论中提到的,注释在许多情况下非常简单且有用。

一些专家认为配置必须与代码分开,但我认为在这种情况下,您可以使用注释来配置如何将实体保存在数据库中.

请注意,有许多相关注释,例如:

  • @Entity 用于指示它是一个持久实体。
  • @Table 表示此类必须保留在数据库表中。
  • @Column 表示以下属性将是来自 @Table的列
  • @Id 该属性是表的 PK。
  • @GenerateValue 提供主键值生成策略的规范。

您可以Google更多有用的@annotations来获取更多信息。

以下是如何使用注释来注释持久类的示例:

@Entity
@Table(name = "stock", catalog = "mkyong", uniqueConstraints = {
        @UniqueConstraint(columnNames = "STOCK_NAME"),
        @UniqueConstraint(columnNames = "STOCK_CODE") })
public class Stock implements java.io.Serializable {

    private Integer stockId;
    private String stockCode;
    private String stockName;

    public Stock() {
    }

    public Stock(String stockCode, String stockName) {
        this.stockCode = stockCode;
        this.stockName = stockName;
    }

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "STOCK_ID", unique = true, nullable = false)
    public Integer getStockId() {
        return this.stockId;
    }

    public void setStockId(Integer stockId) {
        this.stockId = stockId;
    }

    @Column(name = "STOCK_CODE", unique = true, nullable = false, length = 10)
    public String getStockCode() {
        return this.stockCode;
    }

    public void setStockCode(String stockCode) {
        this.stockCode = stockCode;
    }

    @Column(name = "STOCK_NAME", unique = true, nullable = false, length = 20)
    public String getStockName() {
        return this.stockName;
    }

    public void setStockName(String stockName) {
        this.stockName = stockName;
    }

    @Override
    public String toString() {
        return "Stock [stockCode=" + stockCode + ", stockId=" + stockId
                + ", stockName=" + stockName + "]";
    }
}

更多信息请关注此link.

关于java - 线程中的异常 "main"org.hibernate.MappingException : could not instantiate id generator at org. hibernate.id.IdentifierGeneratorFactory.create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33109890/

相关文章:

java - Hibernate 关系获取配置文件

java - 有没有办法使用带有前缀的 @GenerateValue 创建字符串序列?

java - 删除父项和所有子项

java - fragment 没有每次都刷新/调用

java - 创建加密的 java 聊天服务器/客户端的正确步骤是什么?

android - 在 Android 应用程序中使用 commonc 编解码器的 NoSuchMethodError

java - 为发布的 Artifact 生成 Maven 站点

java - 使用什么字体在 Eclipse 控制台输出中显示日语字符?

Java:导入资源,使用 "*"?

spring-boot - 表达式为空会导致 native 查询出现异常