Ответ 1
Показанный фрагмент кода - это то, что вам нужно. Просто используйте существующую конфигурацию вместо создания новой.
Если вы не создаете конфигурацию (но, к примеру, spring), вам нужно расширить класс, который ее создает.
Как я могу гарантировать, что все свойства загружаются из hibernate.cfg.xml, а затем добавить дополнительные свойства программно? Я видел следующий фрагмент кода, но он выглядит как совершенно новая конфигурация, а не дополнение к существующему.
Configuration c = new Configuration();
c.configure();
c.setProperty("hibernate.connection.username", "abc" );
c.setProperty("hibernate.connection.password", "defgh629154" );
Показанный фрагмент кода - это то, что вам нужно. Просто используйте существующую конфигурацию вместо создания новой.
Если вы не создаете конфигурацию (но, к примеру, spring), вам нужно расширить класс, который ее создает.
Отсчет кода должен загружаться hibernate.cfg.xml
из корня пути к классам, а затем программно добавлять или перезаписывать свойства конфигурации. Поэтому убедитесь, что ваш так называемый "существующий один hibernate.cfg.xml
" находится в корневой части пути к классам.
Если ваш "существующий один hibernate.cfg.xml
" не находится в корневой части пути к классам, но в каком-то пакете вы можете загрузить его, указав его путь к пакету в configure(), нравится
Configuration config = new Configuration();
config.configure("package1/package2/hibernate.cfg.xml");
config.setProperty("hibernate.connection.username", "update" );
config.setProperty("hibernate.connection.password", "defgh629154" );
Это работает нормально, чем я думал
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from standard (hibernate.cfg.xml)
// config file.
Properties c = new Properties();
c.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
c.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
c.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/mydiscou_billing?zeroDateTimeBehavior=convertToNull");
c.setProperty("hibernate.connection.username", "root");
c.setProperty("hibernate.connection.password", "123");
c.setProperty("hibernate.connection.autoReconnect", "true");
c.setProperty("connection.provider_class", "org.hibernate.connection.C3P0ConnectionProvider");
c.setProperty("c3p0.min_size", "5");
c.setProperty("c3p0.max_size", "20");
c.setProperty("c3p0.timeout", "1800");
c.setProperty("c3p0.max_statements", "100");
c.setProperty("hibernate.c3p0.testConnectionOnCheckout", "true");
sessionFactory = new AnnotationConfiguration().setProperties(c).configure().buildSessionFactory();
} catch (Throwable ex) {
// Log the exception.
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
Configuration configuration = new Configuration();
configuration.addAnnotatedClass (org.gradle.Person.class);
configuration.setProperty("connection.driver_class","com.mysql.jdbc.Driver");
configuration.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/hibernate");
configuration.setProperty("hibernate.connection.username", "root");
configuration.setProperty("hibernate.connection.password", "root");
configuration.setProperty("dialect", "org.hibernate.dialect.MySQLDialect");
configuration.setProperty("hibernate.hbm2ddl.auto", "update");
configuration.setProperty("show_sql", "true");
configuration.setProperty(" hibernate.connection.pool_size", "10");
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
sessionFactory = configuration.buildSessionFactory(builder.build());
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Использование .configure()
позволяет Hibernate искать файл hibernate.cfg.xml
. Поэтому, если вы не хотите использовать файл hibernate.cfg.xml
, не используйте .configure()
.
Возможно, вы могли бы создать свою конфигурацию следующим образом:
Configuration cfg = new Configuration();
cfg.addResource("Hibernate.cfg.xml");
а затем примените свои настройки свойств.
Я предположил, что вы хотите создать экземпляр своей конфигурации самостоятельно. Если нет, вам нужно получить его из того, что оно создало, например, Spring LocalSessionFactoryBean, если это то, что вы используете.