问题是这样的:

  我现在有一个被@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. Camera 3D概念

    1. integration time即积分时间是以行为单位表示曝光时间(exposure time)的,比如说INT TIM为159,就是指sensor曝光时间为159行,两者所代表的意思是相同的, ...

  2. DesertWind TopCoder - 1570

    传送门 分析 首先我们要知道为了情况最坏,无论你到哪,一定会在你前往绿洲的最短路上的那片沙子上刮风,所以这个点到绿洲的最短路即为他相连的点中到绿洲距离最短的距离+3和次短的距离+1的最小值,具体实现见 ...

  3. Entity Framework Tutorial Basics(25):Delete Single Entity

    Delete Entity using DBContext in Disconnected Scenario: We used the Entry() method of DbContext to m ...

  4. Java并发之FutureTask

    FutureTask实现了Runnable和Future接口,是一个可取消的异步任务.利用开始和取消计算的方法.查询计算是否完成的方法和获取计算结果的方法,此类提供了对 Future 的基本实现.仅在 ...

  5. 《Maven实战》笔记-7-持续集成

    一.持续集成的步骤: 1.持续编译 2.持续数据库集成 3.持续测试 4.持续审查 5.持续部署 6.持续反馈   二.持续集成工具——Hudson 1.安装Hudson 2.准备Subversion ...

  6. Understanding the Effective Receptive Field in Deep Convolutional Neural Networks

    Understanding the Effective Receptive Field in Deep Convolutional Neural Networks 理解深度卷积神经网络中的有效感受野 ...

  7. bit byte的关系

    字 word 字节 byte 位 bit 字长是指字的长度 1字=2字节(1 word = 2 byte) 1字节=8位(1 byte = 8bit)  一个字的字长为2个字节=2*8=16 一个字节 ...

  8. ChineseLunisolarCalendar 农历日期

    #region 农历日期 static ChineseLunisolarCalendar cCalendar = new ChineseLunisolarCalendar(); /// <sum ...

  9. 转场动画CALayer (Transition)

    1.将对应UI控件的层调用以下接口即可 1.1 .h文件 // // 文 件 名:CALayer+Transition.h // // 版权所有:Copyright © 2018年 leLight. ...

  10. P4724 【模板】三维凸包

    \(\color{#0066ff}{题目描述}\) 给出空间中n个点,求凸包表面积. \(\color{#0066ff}{输入格式}\) 第一行一个整数n,表示点数. 接下来n行,每行三个实数x,y, ...