Ich habe eine einfache Feder Boot-Anwendung mit den folgenden Auto-Konfigurationseigenschaften:Frühling Boot - mit JPA-Repositorys mit Hibernate
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/mywebapp
spring.datasource.username=username
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=validate
Diese funktionieren gut und ich bin in der Lage zu Setup Spring Data JpaRepositories:
public interface UserRepository extends JpaRepository<User, String>
{
User findByName(String name);
}
... für folgende Einheiten:
@Entity
public class User
{
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
protected String uuid;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String password;
@Column(nullable = false)
private String email;
}
... und nutzen sie, wie dies:
@Transactional
public void updatePassword(String username, String password)
{
User user = userRepository.findByName(username);
user.setEmail("[email protected]"); // This gets persisted automatically by the JpaRepository.
}
Jetzt habe ich Schwierigkeiten, die gleiche Sache manuell zu konfigurieren. Ich habe das versucht, folgende:
@Configuration
@EnableTransactionManagement
public class PersistenceConfig
{
@Bean
public DataSource dataSource()
{
DataSource dataSource = new DataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
dataSource.setUrl("jdbc:postgresql://localhost:5432/mywebapp");
dataSource.setUsername("username");
dataSource.setPassword("password");
return dataSource;
}
@Bean
public LocalSessionFactoryBean sessionFactory()
{
LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource());
sessionFactoryBean.setPackagesToScan("com.example.persistent");
Properties hibernateProperties = new Properties();
hibernateProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
hibernateProperties.setProperty("hibernate.hbm2ddl.auto", "validate");
sessionFactoryBean.setHibernateProperties(hibernateProperties);
return sessionFactoryBean;
}
@Bean
public HibernateTransactionManager transactionManager()
{
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(sessionFactory().getObject());
return transactionManager;
}
}
... aber während keine Ausnahmen geworfen werden, und ich kann jetzt erfolgreich aus der Datenbank gelesen, so scheint es, dass keine der Änderungen, die ich an den Entitäten machen werden persistent.
Hat jemand eine Idee, was fehlt mir für die Ausdauer zu arbeiten?
auf den ersten Blick ist es ok aussieht. Konnten Sie Daten persistieren, bevor Sie die manuelle Konfiguration verwenden? Und können Sie Ihr Repository und die Klasse anzeigen, in der Sie Daten persistieren möchten. – Patrick
Nur neugierig, warum interessiert Sie eine manuelle Konfiguration? –
@Patrick Ich habe jetzt die Repository + Entität hinzugefügt. – glhr