Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate主方法调用_Java_Hibernate - Fatal编程技术网

Java hibernate主方法调用

Java hibernate主方法调用,java,hibernate,Java,Hibernate,我对Hibernate非常陌生,只想查询一下最初的基础知识 我已经创建了我的Hibernate bean package com.behaviour.chapter1; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class User { private int userId; private String firstName; @Id publi

我对Hibernate非常陌生,只想查询一下最初的基础知识

我已经创建了我的Hibernate bean

package com.behaviour.chapter1;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User {

    private int userId;
    private String firstName;

    @Id
    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;
    }
}
我已经在那里配置了hibernate.cfg.xml和db连接。我的问题很简单,我如何从主方法调用它并在Hibernate3.6.6中使用它?我一直在关注一个在线教程,但它是针对Hibernate3.2的,看起来有点不同。如果有人能给我展示一个调用这个bean的非常简单的主方法,创建一个新用户(这将在这个表中创建一个用户),我将不胜感激。另外-如果有人有任何好的Hibernate教程链接,那就太好了:)

谢谢,Hibernate教程

Hibernate教程


是否需要会话对象来访问持久化单元。这些对象由SessionFactory对象提供


检查。

是否需要会话对象来访问持久化单元。这些对象由SessionFactory对象提供


检查。

我假设您已经设置了persistence.xml。如果是这样,您可以使用以下Java代码。您必须用JDBC设置数据和持久化单元替换“…”

private static final String PERSISTENCE_UNIT = "...";

final Map<String, String> properties = new HashMap<String, String>();
properties.put("javax.persistence.jdbc.driver", "...");
properties.put("javax.persistence.jdbc.url", "...");
properties.put("javax.persistence.jdbc.user", "...");
properties.put("javax.persistence.jdbc.password", "...");

final EntityManagerFactory emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT, properties);
final EntityManager em = emf.createEntityManager();

User user = new User();
user.setUserID(0);
user.setFirstName("David");

em.getTransaction().begin();
em.persist(user);
em.getTransaction().commit();
private static final String PERSISTENCE_UNIT=“…”;
最终映射属性=新HashMap();
properties.put(“javax.persistence.jdbc.driver”和“…”);
properties.put(“javax.persistence.jdbc.url”、“…”);
properties.put(“javax.persistence.jdbc.user”、“…”);
properties.put(“javax.persistence.jdbc.password”、“…”);
最终EntityManagerFactory emf=Persistence.createEntityManagerFactory(Persistence\u单元,属性);
最终EntityManager em=emf.createEntityManager();
用户=新用户();
user.setUserID(0);
user.setFirstName(“David”);
em.getTransaction().begin();
em.persist(用户);
em.getTransaction().commit();


Raku

我假设您已经设置了persistence.xml。如果是这样,您可以使用以下Java代码。您必须用JDBC设置数据和持久化单元替换“…”

private static final String PERSISTENCE_UNIT = "...";

final Map<String, String> properties = new HashMap<String, String>();
properties.put("javax.persistence.jdbc.driver", "...");
properties.put("javax.persistence.jdbc.url", "...");
properties.put("javax.persistence.jdbc.user", "...");
properties.put("javax.persistence.jdbc.password", "...");

final EntityManagerFactory emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT, properties);
final EntityManager em = emf.createEntityManager();

User user = new User();
user.setUserID(0);
user.setFirstName("David");

em.getTransaction().begin();
em.persist(user);
em.getTransaction().commit();
private static final String PERSISTENCE_UNIT=“…”;
最终映射属性=新HashMap();
properties.put(“javax.persistence.jdbc.driver”和“…”);
properties.put(“javax.persistence.jdbc.url”、“…”);
properties.put(“javax.persistence.jdbc.user”、“…”);
properties.put(“javax.persistence.jdbc.password”、“…”);
最终EntityManagerFactory emf=Persistence.createEntityManagerFactory(Persistence\u单元,属性);
最终EntityManager em=emf.createEntityManager();
用户=新用户();
user.setUserID(0);
user.setFirstName(“David”);
em.getTransaction().begin();
em.persist(用户);
em.getTransaction().commit();


Raku

有几种方法可以做到这一点,这是设计选择的问题,实现这一点的基本方法是从
hibernate.cfg.xml
文件创建会话工厂。确保文件可以位于类路径中

并使用下面的类,创建一个会话工厂对象,然后用于打开新会话的

  public class HibernateUtil 
  {
    private static final SessionFactory sessionFactory;

     static 
     {
      try 
        {
         // Create the SessionFactory from hibernate.cfg.xml
         sessionFactory = new Configuration().configure().buildSessionFactory();
         } 
         catch (Throwable ex)
         {
           // Make sure you log the exception, as it might be swallowed
           System.err.println("Initial SessionFactory creation failed." + ex);
           throw new ExceptionInInitializerError(ex);
         }
      }

      public static SessionFactory getSessionFactory()
      {
       return sessionFactory;
      }
   }
现在要创建新用户,请执行以下操作:

public class DaoFactory
{
   public void create(Object obj)throws Exception
   {
     Session session = HibernateUtil.getSessionFactory().getCurrentSession();
     session.beginTransaction();
     session.save(obj);
     session.getTransaction().commit();
   }
}
Main

public static void main(String[] args)
{
  try
  {
   User user = new User();
   user.setFirstName("david99world");
   DaoFactory factory = new DaoFactory();
   factory.create(user);
  }
   catch(Exception ex)
  {
   ex.printStackTrace(System.out);
  }
}
编辑

您的
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>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>

<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>

<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>

<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">none</property>

<mapping class="com.behaviour.chapter1.User"/>

</session-factory>
</hibernate-configuration>

com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/test
根
根
1.
org.hibernate.dialogue.mysqldialogue
线
org.hibernate.cache.NoCacheProvider
真的
没有一个

有几种方法可以做到这一点,这是设计选择的问题,实现这一点的基本方法是从
hibernate.cfg.xml
文件创建会话工厂。确保文件可以位于类路径中

并使用下面的类,创建一个会话工厂对象,然后用于打开新会话的

  public class HibernateUtil 
  {
    private static final SessionFactory sessionFactory;

     static 
     {
      try 
        {
         // Create the SessionFactory from hibernate.cfg.xml
         sessionFactory = new Configuration().configure().buildSessionFactory();
         } 
         catch (Throwable ex)
         {
           // Make sure you log the exception, as it might be swallowed
           System.err.println("Initial SessionFactory creation failed." + ex);
           throw new ExceptionInInitializerError(ex);
         }
      }

      public static SessionFactory getSessionFactory()
      {
       return sessionFactory;
      }
   }
现在要创建新用户,请执行以下操作:

public class DaoFactory
{
   public void create(Object obj)throws Exception
   {
     Session session = HibernateUtil.getSessionFactory().getCurrentSession();
     session.beginTransaction();
     session.save(obj);
     session.getTransaction().commit();
   }
}
Main

public static void main(String[] args)
{
  try
  {
   User user = new User();
   user.setFirstName("david99world");
   DaoFactory factory = new DaoFactory();
   factory.create(user);
  }
   catch(Exception ex)
  {
   ex.printStackTrace(System.out);
  }
}
编辑

您的
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>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>

<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>

<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>

<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">none</property>

<mapping class="com.behaviour.chapter1.User"/>

</session-factory>
</hibernate-configuration>

com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/test
根
根
1.
org.hibernate.dialogue.mysqldialogue
线
org.hibernate.cache.NoCacheProvider
真的
没有一个

啊,非常感谢,我还没有设置persistence.xml;你能给我举个例子吗?另外,我仍然不确定用什么填充persistence\u单元?你能举个例子吗?啊,非常感谢,我没有设置persistence.xml;你能给我举个例子吗?另外,我仍然不确定用什么填充persistence\u单元?你能举个例子吗?啊,非常感谢:)我能问一下,你有我可以使用的hibernate.cfg.xml模板吗?我尝试了上面的方法,但我发现了一个错误,我几乎100%确定这是因为XML文件缺少一两个属性。您是如何配置Hibernate的?啊,非常感谢:)我可以问一下,您有可以使用的Hibernate.cfg.XML模板吗?我尝试了上面的方法,但我发现了一个错误,我几乎100%确定这是因为XML文件缺少一两个属性。您是如何配置Hibernate的?