问题是这样的:

  我现在有一个被@Entity标记的类TimeLine,其中id为主键。
  TimeLineController中有一个接收post请求的add()方法,这个方法会接受客户端传来的一个表单,表单中的数据是TimeLine的各个属性。
  第一种情况,我的表单中带有id这个属性,这样写入数据库中的一条timeline,id并不是我表单传来的id,感觉像是数据库自己分配的。
  第二种情况,我我的表单中没有id这个属性,这会返回一个错误。

TimeLine.java

import javax.persistence.*;

@Entity
@Table(name = "timeline")
public class TimeLine { @Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String cotent;
@Column(nullable = false)
private long authorId; public long getId() {
return id;
} public void setId(long id) {
this.id = id;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getCotent() {
return cotent;
} public void setCotent(String cotent) {
this.cotent = cotent;
} public long getAuthorId() {
return authorId;
} public void setAuthorId(long authorId) {
this.authorId = authorId;
}
}

TimeLineRepository.java

import com.springboot.first.entity.TimeLine;
import org.springframework.data.jpa.repository.JpaRepository; public interface TimeLineRepository extends JpaRepository<TimeLine, Long> {
TimeLine findById(long id);
}

TimeLineServiceImpl.java

import com.springboot.first.entity.TimeLine;
import com.springboot.first.netUtil.Response;
import com.springboot.first.netUtil.ResponseCode;
import com.springboot.first.netUtil.ResponseTools;
import com.springboot.first.repository.TimeLineRepository;
import com.springboot.first.service.TimeLineService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.HashMap;
import java.util.List; @Service
public class TimeLineServiceImpl implements TimeLineService { @Autowired
private TimeLineRepository timeLineRepository; @Override
public Response getTimeLineList() {
try {
List<TimeLine> list = timeLineRepository.findAll();
HashMap<String, Object> data = new HashMap<>();
data.put("content", list);
return ResponseTools.response(ResponseCode.SUCCESS,
"", data);
} catch (Exception e) {
return ResponseTools.response(ResponseCode.
Exception_ERROR, e.getMessage(), null);
}
} @Override
public Response selectTimeLineById(long id) {
if(id == 0){
return ResponseTools.response(ResponseCode.PARAM_ERROR,
"", null);
}try{
TimeLine timeLine = timeLineRepository.findById(id);
HashMap<String, Object> data = new HashMap<>();
data.put("content", timeLine);
return ResponseTools.response(ResponseCode.SUCCESS,
"success", data);
}catch (Exception e){
return ResponseTools.response(ResponseCode.
Exception_ERROR, e.getMessage(), null);
}
} @Override
public Response save(TimeLine timeLine) {
if (null == timeLine) {
return ResponseTools.response(ResponseCode.PARAM_ERROR,
"", null);
}
try {
timeLineRepository.save(timeLine);
return ResponseTools.response(ResponseCode.SUCCESS,
"success", null);
} catch (Exception e) {
return ResponseTools.response(ResponseCode.
Exception_ERROR, e.getMessage(), null);
}
} @Override
public Response delete(Long id) {
if(null == id){
return ResponseTools.response(ResponseCode.PARAM_ERROR,
"", null);
}
try{
timeLineRepository.deleteById(id);
return ResponseTools.response(ResponseCode.SUCCESS,
"success", null);
}catch (Exception e){
return ResponseTools.response(ResponseCode.
Exception_ERROR, e.getMessage(), null);
} }
}

TimeLineController.java

import com.springboot.first.entity.TimeLine;
import com.springboot.first.netUtil.Response;
import com.springboot.first.service.TimeLineService;
import org.springframework.web.bind.annotation.*; import javax.annotation.Resource;
import java.util.HashMap; @RestController
@RequestMapping("/timeLine")
public class TimeLineController { @Resource
private TimeLineService timeLineService; @RequestMapping("/list")
public Response getTimeLineList(){
return timeLineService.getTimeLineList();
} @RequestMapping("/get/{id}")
public Response selectTimeLineById(@PathVariable("id") Long id){
return timeLineService.selectTimeLineById(id);
} @RequestMapping(value = "/add", method = RequestMethod.POST)
public Response add(@RequestBody HashMap<String, Object> reqMap){
TimeLine timeLine = new TimeLine();
timeLine.setAuthorId(Long.valueOf((Integer)reqMap.get("authorId")));
timeLine.setCotent((String)reqMap.get("content"));
// timeLine.setId(Long.valueOf((Integer)reqMap.get("id")));
timeLine.setTitle((String)reqMap.get("title"));
return timeLineService.save(timeLine);
} @RequestMapping(value = "/edit", method = RequestMethod.POST)
public Response edit(@RequestBody HashMap<String, Object> reqMap){
TimeLine timeLine = new TimeLine();
timeLine.setAuthorId((Long)reqMap.get("authorId"));
timeLine.setCotent((String)reqMap.get("content"));
timeLine.setId((Long)reqMap.get("id"));
timeLine.setTitle((String)reqMap.get("title"));
return timeLineService.save(timeLine);
} @RequestMapping("/delete/{id}")
public Response delete(@PathVariable Long id){
return timeLineService.delete(id);
}
}

第二种情况页面返回的错误:

解决方法:dao换成了使用原始sql...

spring boot——关于一个Mysql主键的问题的更多相关文章

  1. Spring boot JPA 用自定义主键策略 生成自定义主键ID

    最近学习Spring boot JPA 学习过程解决的一些问题写成随笔,大家一起成长.这次遇到自定义主键的问题 package javax.persistence; public enum Gener ...

  2. MySQL主键设计

    [TOC] 在项目过程中遇到一个看似极为基础的问题,但是在深入思考后还是引出了不少问题,觉得有必要把这一学习过程进行记录. MySQL主键设计原则 MySQL主键应当是对用户没有意义的. MySQL主 ...

  3. spring cloud教程之使用spring boot创建一个应用

    <7天学会spring cloud>第一天,熟悉spring boot,并使用spring boot创建一个应用. Spring Boot是Spring团队推出的新框架,它所使用的核心技术 ...

  4. (45). Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot】

    大家在开发的时候,会喜欢jdbcTemplate操作数据库,有喜欢JPA操作数据库的,有喜欢MyBatis操作数据库的,对于这些我个人觉得哪个使用顺手就使用哪个就好了,并没有一定要使用哪个,个人在实际 ...

  5. MYSQL主键自动增加的配置及auto_increment注意事项

    文章一 原文地址: http://ej38.com/showinfo/mysql-202971.html 文章二:   点击转入第二篇文章 在数据库应用,我们经常要用到唯一编号.在MySQL中可通过字 ...

  6. 获得自动增长的MySQL主键

    下面的脚本教您如何获得自动增长的MySQL主键,如果您对MySQL主键方面感兴趣的话,不妨一看,相信对您学习MySQL主键方面会有所启迪. import java.sql.Connection; im ...

  7. Mysql主键索引、唯一索引、普通索引、全文索引、组合索引的区别

    原文:Mysql主键索引.唯一索引.普通索引.全文索引.组合索引的区别 Mysql索引概念: 说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不 ...

  8. mysql主键设置成auto_increment时,进行并发性能測试出现主键反复Duplicate entry &#39;xxx&#39; for key &#39;PRIMARY&#39;

    mysql主键设置成auto_increment时,进行并发性能測试出现主键反复Duplicate entry 'xxx' for key 'PRIMARY' 解决方法: 在my.cnf的[mysql ...

  9. 如何基于Spring Boot搭建一个完整的项目

    前言 使用Spring Boot做后台项目开发也快半年了,由于之前有过基于Spring开发的项目经验,相比之下觉得Spring Boot就是天堂,开箱即用来形容是绝不为过的.在没有接触Spring B ...

随机推荐

  1. loj10093 网络协议

    传送门 分析 第一问我们不难想出是缩点之后的新图中入度为0的点的个数,对于第二问,我们画一画可以发现最优策略就是对于每一个入度为0的点都有一个出度为0的点连向它,而对于每一个出度为0的点也一定连向一个 ...

  2. loj10099 矿场搭建

    传送门 分析 我们发现可以将这张图转换为一个联通块来处理.我们求出所有的割点.在求完之后我们我们对于每一个点双连通分量如果它没有割点相连则需要布置两个出口,因为可能有一个出口正好被割掉.而如果有一个割 ...

  3. Python学习笔记--2--面向对象编程

    面向对象 类和装饰器@ #coding=gbk class student: def __init__(self,name,grand):#初始化构造函数,self相当于java中的this,相当于一 ...

  4. thrift使用小记

        Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数 ...

  5. jQuery 基础 : 获取对象 根据属性、内容匹配, 还有表单元素匹配

    指定元素中包含 id 属性的, 如: $("span[id]")   <span id="span1" name="S1">AA ...

  6. [译]Javascript中的函数

    本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...

  7. 2015年第六届蓝桥杯省赛T10 生命之树(树形dp+Java模拟vector)

    生命之树 在X森林里,上帝创建了生命之树. 他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值. 上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都 ...

  8. CentOS使用NTFS-3G加载NTFS硬盘

    CentOS使用NTFS-3G加载NTFS硬盘 CentOS 挂载NTFS格式硬盘时会报错unknown filesystem type 'ntfs',这时就需要用到第三方的插NTFS-3G来加载NT ...

  9. c#继承、多重继承

    c#类 1.c#类的继承 在现有类(基类.父类)上建立新类(派生类.子类)的处理过程称为继承.派生类能自动获得基类的除了构造函数和析构函数以外的所有成员,可以在派生类中添加新的属性和方法扩展其功能.继 ...

  10. String类-小用

    字符串-string (1)string在Java中是一个引用类型,string变量可引用一个字符串对象 (2) 例1: s0,s1,s2引用同一个对象 New创建的两个string是不同的对象只是内 ...