gpt4 book ai didi

java - Hibernate - 如何持久化一个对象?

转载 作者:行者123 更新时间:2023-11-30 02:42:00 25 4
gpt4 key购买 nike

所以我制作了一个简单的 hibernate 应用程序,并使用 HibernateUtil 静态方法启动了一个提供适当 session 的 SessionFactory。

问题是 - 我怎样才能坚持使用这个代码?我更困惑的是,我如何从这个设计中构建出 HibernateUtil 来满足我的每个对象的需求?

package com.hibernation.main;

import com.hibernation.model.Animal;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;


/**
* Created by jonathan on 27/12/16.
*/
public class Earth {

public static void main(String[] args){

Animal a = new Animal(1,"lizard", "gekko", "test");

HibernateUtil();
}

public static void HibernateUtil(){

// create configuration instance and pass in the
// hibernate configuration file.
Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");

// version 4.x and up, service registry is being used.
// The ServiceRegistry scopes the Service.
// The ServiceRegistry manages the lifecycle of the Service.
// The ServiceRegistry handles injecting dependencies into the Service
// (actually both a pull and a push/injection approach are supported).
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();

// create a Session factory instance: session factory creates sessions
// at the request of clients.
// conceptually, this is a single data store that is thread safe.
// should be wrapped in a singleton (HibernateUtil being a common convention)
// the internal state is immutable - once it is created the state is set.
SessionFactory factory = configuration.buildSessionFactory(serviceRegistry);

// get the current session.
Session session = factory.getCurrentSession();

// begin transaction
session.getTransaction().begin();

// Print out all required information
System.out.println("Session Is Opened :: "+ session.isOpen());
System.out.println("Session Is Connected :: "+ session.isConnected());



// commit transaction
session.getTransaction().commit();




}



}

最佳答案

Question is - how can I persist using this code ?

你不能,你必须修改代码。

您必须像这样保存实体:

/**
* Created by jonathan on 27/12/16.
*/
public class Earth {

public static void main(String[] args){

Animal a = new Animal(1,"lizard", "gekko", "test");

HibernateUtil(a);
}

public static void HibernateUtil(Animal a){

// create configuration instance and pass in the
// hibernate configuration file.
Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");

// version 4.x and up, service registry is being used.
// The ServiceRegistry scopes the Service.
// The ServiceRegistry manages the lifecycle of the Service.
// The ServiceRegistry handles injecting dependencies into the Service
// (actually both a pull and a push/injection approach are supported).
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();

// create a Session factory instance: session factory creates sessions
// at the request of clients.
// conceptually, this is a single data store that is thread safe.
// should be wrapped in a singleton (HibernateUtil being a common convention)
// the internal state is immutable - once it is created the state is set.
SessionFactory factory = configuration.buildSessionFactory(serviceRegistry);

// get the current session.
Session session = factory.getCurrentSession();

// begin transaction
session.getTransaction().begin();

// Print out all required information
System.out.println("Session Is Opened :: "+ session.isOpen());
System.out.println("Session Is Connected :: "+ session.isConnected());
session.save(a);


// commit transaction
session.getTransaction().commit();




}



}

当心

这是一个很糟糕的例子,因为它是 very procedual并且不是面向对象的,并且仅包含对代码的最小更改。您还需要解决许多其他问题,例如您将失去对构造的 sessionfactory 的访问权限的问题,请阅读 OOD .

IoC 和 Demeter 定律迫使我们使用 TransactionManager。 Spring-TX 是一种通常最先进的实现。

关于java - Hibernate - 如何持久化一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41395200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com