jpa实体对象如何动态获取
表名?
现在数据库中有6张
表,
表结构相同,
表名后缀不同,如:T00,T01,T02..T05, 后缀是使用
表中的
字段xx通过hash计算出来的
这种
实体,如何动态获取到
表名。要是
表多了有的是按月分
表的,如何定义这些
表对应的
实体类,最好是只使用一个类来处理。
各位有谁遇到过这种情况??
在学习使用jpa的时候发现查询数据库的时候有些字段没有获取到,都是使用了驼峰命名的多个单词组成的字段。查看服务打印的log后发现自动生成的查询语句对于驼峰命名的多个单词组成的字段连接方式是以"_"连接。比如,在实体里面的字段是userName,数据库中的字段也是userName,但是自动生成的sql语句中的字段是user_name,对应不上,所以找不到。
解决方式是在配置文件applicatio...
文章目录默认实现使用@Table自定义表格名字在JPQL Queries中重写表格名字
Spring Boot JPA中使用@Entity和@Table
本文中我们会讲解如何在Spring Boot JPA中实现class和数据表格的映射。
Spring Boot JPA底层是用Hibernate实现的,默认情况下,数据库表格的名字是相应的class名字的首字母大写。命名的定义是通过接口...
简单实体的使用
@javax.persistence.Eneity和@javax.persistence.Table:
@javax.persistence.Entity:标注在类上表示一个实体,所有的实体都必须标注有该注解;
默认情况下,实体的名称等于完全限定实体类名;
@Entity(name="Author"):可以通过@Entity的name属性自定义实体名称;
@Tab...
SpringDataJPA的使用
JPA是什么?
JPA(Java Persistence API)是Sun官方提出的Java持久化规范. 为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据. 它的出现是为了简化现有的持久化开发工作和整合ORM技术. 结束各个ORM框架各自为营的局面.
JPA仅仅是一套规范,不是一套产品, 也就是说Hibernate, TopLink等是...
JPA:JpaRepository中的实体和想要查询的实体不对应怎么办?
每个实体要都要有一个对应的XXXRepository来执行CRUD操作的。
比如现有一个School实体,以及SchoolRepository 接口:
SchoolRepository extends JpaRepository<School, Integer>
如果查询结果是学校,都是没有问题的。
SchoolRepository extends JpaRepository<School, Integer>
使用 jpa 时,一般一个实体类对应一个一个表,dao层基本也是一个实体类写一个 JpaRepository,今天讲的是LZ从 json 字段取出来的几个值定义的一个 类(也可以是很多张表各抽取几个信息合成的一个类)
直接上代码
先看没有表对应的实体类
data class UserBmr (
var time: String? = null,
var bmr: Int...
在Spring Boot中使用JPA动态表名需要使用DSL(Domain Specific Language)查询来实现。DSL查询是一种基于对象的查询语言,可以根据运行时条件生成动态的SQL查询。
要实现动态表名,首先需要定义一个通用的实体类,该实体类包含了所有可能的表字段。然后根据运行时条件,使用DSL查询构建动态的表名。
以下是一个示例,演示了如何在Spring Boot中使用JPA动态表名:
1. 定义通用的实体类:
```java
@Entity
@Table(name = "generic_table")
public class GenericEntity {
// 定义通用的表字段
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 其他字段...
// getter和setter方法
2. 创建动态表名的接口:
```java
public interface DynamicTableName {
@Query(value = "SELECT * FROM :tableName", nativeQuery = true)
List<GenericEntity> findByDynamicTableName(@Param("tableName") String tableName);
3. 创建实现动态表名接口的类:
```java
@Repository
public class DynamicTableNameImpl implements DynamicTableName {
@PersistenceContext
private EntityManager entityManager;
@Override
public List<GenericEntity> findByDynamicTableName(String tableName) {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<GenericEntity> query = criteriaBuilder.createQuery(GenericEntity.class);
Root<GenericEntity> root = query.from(GenericEntity.class);
// 动态设置表名
root.alias(tableName);
query.select(root);
TypedQuery<GenericEntity> typedQuery = entityManager.createQuery(query);
return typedQuery.getResultList();
4. 在Service或Controller中使用动态表名查询:
```java
@Service
public class YourService {
@Autowired
private DynamicTableName dynamicTableName;
public List<GenericEntity> findByDynamicTableName(String tableName) {
return dynamicTableName.findByDynamicTableName(tableName);
在以上示例中,通过将动态表名作为参数传递给findByDynamicTableName()方法,可以实现根据不同的条件查询不同的表。注意,这里使用了原生查询(nativeQuery = true)来执行SQL查询。
希望以上示例对你有帮助!