Spring Boot + Hibernate-未映射实体+最佳配置方式

阿哈隆·巴尔·埃尔(Aharon Bar-El)

我正在尝试使用hibernate学习spring-boot基本注释配置,以使自己成为始终可用的模板。

我正在STS(spring工具套件)3.8.3上使用spring-boot最新发行版1.51。

这是我的主要内容:

@SpringBootApplication
@EnableAutoConfiguration
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

现在,我知道会@SpringBootApplication自动提供@componetScan,因此我没有添加它。

我的配置类:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "someEntityManagerFactory", transactionManagerRef = "someTransactionManager", basePackages = {
        "com.example.*" })
@EntityScan(basePackages = "com.demo.models")
@ConfigurationProperties(prefix = "mysql.datasource")
public class DataBaseConfig {

    @Autowired
    private Environment env;

    @Bean
    public DataSource someDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(env.getProperty("mysql.datasource.driver-class-name"));
        dataSource.setUrl(env.getProperty("mysql.datasource.url"));
        dataSource.setUsername(env.getProperty("mysql.datasource.username"));
        dataSource.setPassword(env.getProperty("mysql.datasource.password"));
        return dataSource;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean someEntityManagerFactory() {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(someDataSource());
        em.setPackagesToScan(new String[] { "org.openlegacy.analytics.models" });
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        em.setJpaProperties(additionalProperties());

        return em;
    }

    @Bean
    public PlatformTransactionManager someTransactionManager() {
        JpaTransactionManager tm = new JpaTransactionManager();
        tm.setEntityManagerFactory(someEntityManagerFactory().getObject());
        tm.setDataSource(someDataSource());
        return tm;
    }

    Properties additionalProperties() {
        Properties properties = new Properties();
        properties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("spring.jpa.hibernate.ddl-auto"));
        properties.setProperty("hibernate.dialect", env.getProperty("spring.jpa.properties.hibernate.dialect"));
        properties.setProperty("spring.jpa.show-sql", env.getProperty("spring.jpa.show-sql"));
        properties.setProperty("spring.jpa.hibernate.naming.physical-strategy",
                env.getProperty("spring.jpa.hibernate.naming.physical-strategy"));
        return properties;
    }

}

我的控制器类:

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserRepository userRipository;

    @RequestMapping(value = "", method = RequestMethod.GET)
    public List<User> getItems() {
        return userRipository.getUsers();
    }

    @RequestMapping(value = "/message", method = RequestMethod.GET)
    public String getMessage() {
        return userRipository.getMessage();
    }

}

我的存储库类:

@Transactional
@Repository
public class UserRepository {

    @PersistenceContext
    private EntityManager entityManager;

    @SuppressWarnings("unchecked")
    public List<User> getUsers() {
        return entityManager.createQuery("select u from User u").getResultList();
    }

    public String getMessage() {
        return "hello";
    }
}

我的实体课:

@Entity(name = "user")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

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

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

    public Integer getId() {
        return id;
    }

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

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

和我的属性文件:

# DataSource settings: set here your own configurations for the database connection.
mysql.datasource.username=openlegacy
mysql.datasource.password=openlegacy
mysql.datasource.driver-class-name=com.mysql.jdbc.Driver
mysql.datasource.url=jdbc:mysql://localhost:3306/olbank
spring.jpa.database= MYSQL

spring.data.jpa.repositories.enabled=true
#spring.jpa.database-platform=org.hibernate.dialect.MYSQL5Dialect

# Show or not log for each sql query
spring.jpa.show-sql = true

# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update

# Naming strategy
#spring.jpa.hibernate.naming.strategy= org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.hibernate.naming.physical-strategy= org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

当我试图从用户表中检索数据时,出现此错误:

org.hibernate.hql.internal.ast.QuerySyntaxException:用户未映射...

我的问题是:

  1. 为什么我会收到此错误?我知道该用户是通过类名映射的,这就是我正在做的

  2. 这是用spring-boot配置休眠模式的最佳方法吗?对我而言,按照最佳实践编写代码很重要。

请给出详细的答案,以便我可以学习。

任何其他有用的信息都欢迎:)

谢谢。

里佐(M. Rizzo)

好的。您需要在整体配置中解决一些问题。您当前正在为实体用户提供别名

@Entity(name = "user")

很好,但是如果您要为实体提供名称,则需要在JPQL中引用它,因此,“从用户u中选择u”将需要变为

select u from user u

我可能只是建议摆脱您的名称限定符,而将您的查询保留为 "select u from User u".

其次,您的软件包引用确实存在一些问题:

  1. @EnableJpaRepositories批注中,更改basePackages以引用实际存储库包的基础,guess "com.demo.repository"摆脱通配符参考。
  2. 在someEntityManagerFactory()方法中,您将basePackage设置为(我认为这是不正确的),"org.openlegacy.analytics.models".表示您的实体在之下"com.demo.models"因此,您应该将该设置器更改为

    em.setPackagesToScan(new String[] { "com.demo.models" });
    

这应该够了吧。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring Boot + Hibernate-用户未映射

来自分类Dev

Spring Boot设置:org.hibernate.HibernateException:未配置CurrentSessionContext

来自分类Dev

如何使用 Spring Boot 配置 JPA + HIBERNATE

来自分类Dev

Spring Boot org.hibernate.hql.internal.ast.QuerySyntaxException:未映射Utilisateur(使用MYSQL)

来自分类Dev

Spring Boot org.hibernate.hql.internal.ast.QuerySyntaxException:未映射Utilisateur(使用MYSQL)

来自分类Dev

Spring Hibernate:涉及映射实体的SQLQuery

来自分类Dev

Spring Hibernate:重新加载实体映射

来自分类Dev

Spring Hibernate:重新加载实体映射

来自分类Dev

@Id 未映射到 Spring-Boot 控制器中的特定实体

来自分类Dev

Spring boot :Hibernate 注解

来自分类Dev

在Spring Boot上使用Hibernate映射PostGIS几何点字段

来自分类Dev

使用Spring Boot进行Hibernate Envers-配置

来自分类Dev

使用Spring Boot 2.1+为Hibernate配置缓存

来自分类Dev

Spring Boot,CommandLineRunner配置Hibernate时出现问题

来自分类Dev

Spring Boot请求映射最佳实践

来自分类Dev

JPA,spring-boot,使用旧的未注释类配置实体管理器

来自分类Dev

Spring Boot Hibernate启动缓慢

来自分类Dev

在 Spring Boot 中记录 Hibernate

来自分类常见问题

在Spring Boot中以编程方式配置DataSource

来自分类Dev

Hibernate和Spring MVC中实体的双向映射

来自分类Dev

Spring + Hibernate:未知实体

来自分类Dev

Spring Hibernate 将对象转移到视图的最佳方式

来自分类Dev

从用户实体获取角色集时,Spring Boot Hibernate 出现异常

来自分类Dev

Hibernate + Spring SessionFactory配置

来自分类Dev

Spring Hibernate配置问题

来自分类Dev

一对一映射获取空值Spring Boot JPA Hibernate

来自分类Dev

Spring Boot JPA @Query和映射问题“无法构建Hibernate SessionFactory”

来自分类Dev

Hibernate中的ManyToMany映射引用错误(api生成的表名)表Spring Boot

来自分类Dev

Spring boot - 为什么手动配置 Hibernate 时需要排除?

Related 相关文章

  1. 1

    Spring Boot + Hibernate-用户未映射

  2. 2

    Spring Boot设置:org.hibernate.HibernateException:未配置CurrentSessionContext

  3. 3

    如何使用 Spring Boot 配置 JPA + HIBERNATE

  4. 4

    Spring Boot org.hibernate.hql.internal.ast.QuerySyntaxException:未映射Utilisateur(使用MYSQL)

  5. 5

    Spring Boot org.hibernate.hql.internal.ast.QuerySyntaxException:未映射Utilisateur(使用MYSQL)

  6. 6

    Spring Hibernate:涉及映射实体的SQLQuery

  7. 7

    Spring Hibernate:重新加载实体映射

  8. 8

    Spring Hibernate:重新加载实体映射

  9. 9

    @Id 未映射到 Spring-Boot 控制器中的特定实体

  10. 10

    Spring boot :Hibernate 注解

  11. 11

    在Spring Boot上使用Hibernate映射PostGIS几何点字段

  12. 12

    使用Spring Boot进行Hibernate Envers-配置

  13. 13

    使用Spring Boot 2.1+为Hibernate配置缓存

  14. 14

    Spring Boot,CommandLineRunner配置Hibernate时出现问题

  15. 15

    Spring Boot请求映射最佳实践

  16. 16

    JPA,spring-boot,使用旧的未注释类配置实体管理器

  17. 17

    Spring Boot Hibernate启动缓慢

  18. 18

    在 Spring Boot 中记录 Hibernate

  19. 19

    在Spring Boot中以编程方式配置DataSource

  20. 20

    Hibernate和Spring MVC中实体的双向映射

  21. 21

    Spring + Hibernate:未知实体

  22. 22

    Spring Hibernate 将对象转移到视图的最佳方式

  23. 23

    从用户实体获取角色集时,Spring Boot Hibernate 出现异常

  24. 24

    Hibernate + Spring SessionFactory配置

  25. 25

    Spring Hibernate配置问题

  26. 26

    一对一映射获取空值Spring Boot JPA Hibernate

  27. 27

    Spring Boot JPA @Query和映射问题“无法构建Hibernate SessionFactory”

  28. 28

    Hibernate中的ManyToMany映射引用错误(api生成的表名)表Spring Boot

  29. 29

    Spring boot - 为什么手动配置 Hibernate 时需要排除?

热门标签

归档