对于JPA实现的hibernate实体的下划线无法转换问题

这个问题困扰了我很久,最后终于解决了,废话不多说。


User这个实体类里面有如下

 @ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "accounts_id")
	public Accounts getAccounts() {
		return this.accounts;
	}

这时候如果 我在action里面调用了

User user = userService.getByProperties("accounts_id", account.getId());

就会报错

could not resolve property: accounts_id of: com.pwq.entity.User [select o from com.pwq.entity.User o where 1=1 and o.accounts_id=:accounts_id]

但是改成下面的就OK了

User user = userService.getByProperties("accounts.id", account.getId());

如果实体里面带下划线的字段是一个基本对象如Integer、String等,如

@Column(name = "test_id")
	public Integer getTestId() {
		return this.testId;
	}
因为和hibernate的映射机制有关的,所以把abc_def改成abcDef就可以了
List<Testtable> tb0 = testtablesr.criteriaEqeals("testId", 321);


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以在application.properties或者application.yml文件中配置spring.jpa.hibernate.ddl-auto属性来改变实体类的扫描。配置方式如下: ``` spring.jpa.hibernate.ddl-auto=create-drop ``` 其中create-drop表示在程序启动时创建表,程序停止时删除表。也可以使用其它值,如create、update、validate等。 如果想要指定扫描的实体类,可以使用@EntityScan注解,如下: ``` @EntityScan(basePackages = {"com.example.entity1", "com.example.entity2"}) ``` 这样只会扫描com.example.entity1和com.example.entity2包中的实体类。 ### 回答2: 要改变spring.jpa.hibernate.ddl-auto扫描的实体,可以按照以下步骤进行操作: 1. 首先,在应用的配置文件中找到spring.jpa.hibernate.ddl-auto属性,并将其值设置为none。这样会禁止自动创建、更新和删除数据库表结构。 2. 然后,创建一个命名为HibernateConfig的类,并使用@Configuration注解进行标记。在这个类中,可以使用@EnableJpaAuditing注解来启用JPA的审计功能。 3. 在HibernateConfig类中,创建一个名为entityManagerFactory的方法,并使用@Primary和@Bean注解进行标记。在这个方法中,可以通过LocalContainerEntityManagerFactoryBean来创建并配置一个EntityManagerFactory,并通过设置其packagesToScan属性来指定要扫描的实体类所在的包。 4. 接下来,在配置类中创建一个名为transactionManager的方法,并使用@Primary和@Bean注解进行标记。在这个方法中,可以通过JpaTransactionManager来创建一个事务管理器,并将EntityManagerFactory作为参数传递给它。 5. 最后,在应用的主类中使用@EnableJpaRepositories注解来启用JPA的存储库功能。 通过以上步骤,就可以改变spring.jpa.hibernate.ddl-auto扫描的实体。在配置文件中设置ddl-auto为none,表示禁止自动创建表结构。然后,在配置类中使用packagesToScan属性指定要扫描的实体类所在的包,从而指定要进行实体扫描的范围。最后,通过@EnableJpaRepositories注解来启用JPA的存储库功能,以便能够在应用中使用JPA的CRUD操作。 ### 回答3: 在Spring Boot中,可以通过设置`spring.jpa.hibernate.ddl-auto`属性来指定Hibernate在应用启动时自动创建、更新或验证数据库表结构。该属性默认值为`create-drop`,表示每次启动应用程序时创建数据库表并在应用程序关闭时删除表。 要改变`spring.jpa.hibernate.ddl-auto`属性扫描哪些实体,可以通过以下方式进行操作: 1. **使用@EntityScan注解**:在Spring Boot的主应用程序类上使用`@EntityScan`注解,该注解允许指定要扫描的包或类,以查找实体类。例如,如果要扫描`com.example.entity`包下的实体类,可以在主应用程序类上添加`@EntityScan("com.example.entity")`注解。 2. **使用LocalContainerEntityManagerFactoryBean**:在Spring Boot的配置类中,可以使用`LocalContainerEntityManagerFactoryBean`来自定义EntityManagerFactory的创建过程。通过设置`packagesToScan`属性,可以指定要扫描的实体类所在的包。例如: ```java @Configuration public class JpaConfig { @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean(); emf.setPackagesToScan("com.example.entity"); // 其他配置... return emf; } } ``` 这样配置后,Hibernate将只扫描指定包下的实体类。 通过上述两种方式,可以改变`spring.jpa.hibernate.ddl-auto`属性扫描哪些实体。可以根据实际需求选择适合的方式,以便根据需要自定义实体类的扫描范围。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值