java jpa查询没有id表的方法

 更新时间:2023年09月05日 11:18:13   作者:追逐梦想永不停  
本文主要介绍了java jpa查询没有id表的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、前言

jpa中,如果想查询数据库,必须有一个@Entity实体类,这个类的内容要与数据库表的列一一对应;
并且这个类中,必须有一个Long id字段,对应数据库表中的id列。

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

但是,本人的项目里有个数据库表,确实没有id这一列,有的是class_id这一列,名字不一样。

CREATE TABLE `classinfo` (
  `class_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `class_name` varchar(200) NOT NULL DEFAULT '' COMMENT 'name',
  PRIMARY KEY (`class_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

这种情况,使用jpa查询就会报错,找不到id列(确实没有)

即使改@Entity代码,改为:

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long classId;

这样也是不行的,查询也会报错(名字必须叫id)

表结构确实不能修改,查询又必须使用jpa,但是没有id列又不行……

二、解决方法

1.可以先建一个空表,只有一个id列,例如:

CREATE TABLE `simpletable` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.然后写一个@Entity实体类,与空表simpletable对应,只有一个id列,例如:

import javax.persistence.*;
import java.io.Serializable;
import java.util.Objects;
/**
 * A Simpletable.
 */
@Entity
@Table(name = "simpletable")
public class Simpletable implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // jhipster-needle-entity-add-field - JHipster will add fields here, do not remove
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        Simpletable simpletable = (Simpletable) o;
        if (simpletable.getId() == null || getId() == null) {
            return false;
        }
        return Objects.equals(getId(), simpletable.getId());
    }
    @Override
    public int hashCode() {
        return Objects.hashCode(getId());
    }
    @Override
    public String toString() {
        return "Simpletable{" +
            "id=" + getId() +
            "}";
    }
}

3.然后写一个repository类,放入这个实体类,然后查询其它表,如下:

import xxx.Simpletable;
import org.springframework.data.jpa.repository.*;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
 * Spring Data  repository for the Classinfo entity.
 */
@SuppressWarnings("unused")
@Repository
public interface ClassinfoRepository extends CrudRepository<Simpletable, Long> {
    @Query(value = "select * " +
            " from classinfo  " +
            "where class_id = ?1 " +
            "order by  class_id DESC ", nativeQuery = true)
    List<Map<String,Object>> findByClassId(String id);
}

(1)这段代码里,主要是在extends CrudRepository<Simpletable, Long>这里放入了Simpletable(必须放一个与表对应的实体类,否则执行查询还是会报错)

(2)然后,在这个类中去查询没有id列的表classinfo

(3)由于classinfo表没有实体类(没有id列,无法写实体类),所以只能返回 List<Map<String,Object>>类型,后续需要自己拆分获取字段。

(4)这样,就实现了jpa查询没有id的表的方法。

三、备注

1.注意返回类型不能写成List<HashMap<String,Object>>,会无法正常获取key-value
2.如果使用jpa,最好是建表的时候就建一个id列作为自增主键。

到此这篇关于java jpa查询没有id表的方法的文章就介绍到这了,更多相关java jpa查询没有id表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mybatis-plus 如何操作json字段

    mybatis-plus 如何操作json字段

    这篇文章主要介绍了mybatis-plus 如何操作json字段,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • JDK8接口的默认与静态方法-接口与抽象类的区别详解

    JDK8接口的默认与静态方法-接口与抽象类的区别详解

    这篇文章主要介绍了JDK8接口的默认与静态方法-接口与抽象类的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • Springboot的yml配置文件用法

    Springboot的yml配置文件用法

    这篇文章主要介绍了Springboot的yml配置文件用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Java应用层协议WebSocket实现消息推送

    Java应用层协议WebSocket实现消息推送

    后端向前端推送消息就需要长连接,首先想到的就是websocket,下面这篇文章主要给大家介绍了关于java后端+前端使用WebSocket实现消息推送的详细流程,需要的朋友可以参考下
    2023-02-02
  • java中的数学计算函数的总结

    java中的数学计算函数的总结

    这篇文章主要介绍了java中的数学计算函数的总结的相关资料,需要的朋友可以参考下
    2017-07-07
  • Java8简单了解Lambda表达式与函数式接口

    Java8简单了解Lambda表达式与函数式接口

    这篇文章主要介绍了Java8简单了解Lambda表达式与函数式接口,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Java Web开发常用框架Spring MVC Struts示例解析

    Java Web开发常用框架Spring MVC Struts示例解析

    这篇文章主要为大家介绍了Java Web开发常用框架Spring MVC Struts示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • JavaEE Filter敏感词过滤的方法实例详解

    JavaEE Filter敏感词过滤的方法实例详解

    我们无论是在聊天还是在留言时,都有一些信息不希望别人看到。那么如果过滤这些关键词呢?下面小编给大家分享JavaEE Filter敏感词过滤的方法实例详解,感兴趣的朋友一起学习吧
    2016-05-05
  • Java欧拉函数的计算代码详解

    Java欧拉函数的计算代码详解

    这篇文章主要介绍了Java实现欧拉函数的计算,从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明,本文通过实例代码给大家介绍的很详细,需要的朋友可以参考下
    2021-05-05
  • Nacos多环境的实现过程

    Nacos多环境的实现过程

    本文介绍Nacos实现多环境的方案,包括单租户和多租户两种类型,详细介绍了如何在Nacos中创建命名空间、配置文件和项目,并通过配置文件的DataId和Group区分不同环境和项目,作者通过实战场景展示了如何配置和启动项目,验证了配置文件的读取和隔离效果
    2024-12-12

最新评论