gpt4 book ai didi

java - 如何使用 Java Spring 配置运行独立的 Hibernate 4 SchemaExport

转载 作者:行者123 更新时间:2023-12-01 20:08:50 26 4
gpt4 key购买 nike

我们有一个 Java Spring 项目,使用 JPA 和 Hibernate 4 进行 ORM。我们专门使用 Java 配置,因此我们没有任何 hibernate.properties 或 persistence.xml 映射文件。

我们还使用 Spring 的 Jsr310JpaConverters 和一些实现 javax.persistence.AttributeConverter 的自定义属性转换器。包扫描会自动拾取自定义转换器。

除此之外,我们的设置相当标准,基本上就是

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackageClasses = BasePackageMarker.class, repositoryBaseClass = InternalRepositoryImpl.class)
public class JpaConfig {

// values loaded from property file

public Properties jpaProperties() {
Properties jpaProperties = new Properties();
jpaProperties.setProperty(Environment.DIALECT, dialect);
jpaProperties.setProperty(Environment.HBM2DDL_AUTO, getHbm2ddlAuto());
// ...
return jpaProperties;
}

@Bean
public DataSource dataSource() {
HikariConfig config = new HikariConfig();
config.setDriverClassName(driver);
config.setJdbcUrl(url);
config.setUsername(username);
config.setPassword(password);
// ...
return new HikariDataSource(config);
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(dataSource);
entityManagerFactoryBean.setPackagesToScan(
BasePackageMarker.class.getPackage().getName(),
Jsr310JpaConverters.class.getPackage().getName()
);
entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
entityManagerFactoryBean.setJpaProperties(jpaProperties());
return entityManagerFactoryBean;
}

// ...
}

我正在寻找一种运行 Hibernate 的 SchemaExport 来创建数据库架构的方法,无需运行 Tomcat 或 Spring 应用程序,其配置与使用 hbm2ddl=create 启动应用程序相同,特别是找到所有实体类和属性转换器。我想用 Maven 运行它,但一旦我知道从哪里开始,我就可以弄清楚那部分。

我发现了许多针对 Hibernate 3 或 XML 配置的过时答案和库,似乎没有任何内容适合我们的设置。我确信答案已经存在,但此时我很困惑,不知道该尝试什么。有什么解决方案或指示吗?

最佳答案

我认为您需要使用 AnnotationConfiguration():在hibernate中,不使用hibernate.cfg.xml也可以实现数据库连接。在hibernate注解中,有一个名为AnnotationConfiguration的类。 AnnotationConfiguration提供了配置数据库属性的方法。AnnotationConfiguration 有不同的方法,如 .addAnnotatedClass、.addProperties 等。有 .configure() 方法寻找 hibernate.cfg,如果我们不打算使用 hibernate.cfg,则不需要使用 .configure()。

假设我有实体用户

package com.persistence;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="user")
public class User {
@Id
@GeneratedValue
private int id;

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

public int getId() {
return id;
}

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

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

HibernateUtil 类

public class HibernateUtil {
private static final SessionFactory concreteSessionFactory;
static {
try {
Properties prop= new Properties();
prop.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/hibernate");
prop.setProperty("hibernate.connection.username", "root");
prop.setProperty("hibernate.connection.password", "");
prop.setProperty("dialect", "org.hibernate.dialect.MySQLDialect");
prop.setProperty("hbm2ddl.auto", "create");

concreteSessionFactory = new AnnotationConfiguration()
.addPackage("com.persistence")
.addProperties(prop)
.addAnnotatedClass(User.class)
.buildSessionFactory();
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static Session getSession()
throws HibernateException {
return concreteSessionFactory.openSession();
}

public static void main(String... args){
Session session=getSession();
session.beginTransaction();
User user=(User)session.get(User.class, new Integer(1));
System.out.println(user.getName());
session.close();
}
}

关于java - 如何使用 Java Spring 配置运行独立的 Hibernate 4 SchemaExport,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47022165/

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