一、结论
记住book0_
表名是没有问题的;应该让含有大写的列名的@Colume(name = "全小写"
)
// 让含有大写的列名的`@Colume(name = "全小写"`)
@Column(name = "bookname")
private String bookName;
// 不含大写的就不用写,只要你和表中同名即可
private String author;
二、研究
让我们开启显示出错的sql语句spring.jpa.show-sql = true
1.不写@Colume()
mysql表:这列名大小写是不敏感的。
package com.sand.alphon.model;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import javax.persistence.*;
@Entity
@Table(name = "book")
@JsonIgnoreProperties({"handler","hibernateLazyInitializer"})
public class Book {
// 图书馆登记书籍唯一id
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int bookId;
// 书名,不唯一
private String bookName;
// 作者名
private String author;
// 出版时间,yyyy-mm-dd
private String publicTime;
// 出版社
private String press;
// 书籍所在图书馆地址(楼层-书架-书架上的书号)
private String location;
// 借阅状态: 0 :在馆可借 1:在馆预约 2:借出
private int status;
// 为了简单改成只有单个所属类别
private String category;
// 价格
private double price;
public Book() {
}
public int getBookId() {
return bookId;
}
public void setBookId(int bookId) {
this.bookId = bookId;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPublicTime() {
return publicTime;
}
public void setPublicTime(String publicTime) {
this.publicTime = publicTime;
}
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
可以看到整个列名就是book0_.book_id
,.
前是表名,后是列名 。
book0_
没有问题,这样映射的表名就这样。有问题的是book_id
。
是因为不写@Colume
默认生成的是将列名其中的大写字母转换成带_
的小写字母。而数据库就直接比_i
,而不是I
,所以就错咯。
2.@Colume写大写
@Column(name = "bookName")
private String bookName;
@Column(name = "bookName")
中有大写字母。本来默认映射就是同private String bookName;
一样的,当然继续错
3.@Colume都小写
// 让含有大写的列名的`@Colume(name = "全小写"`)
@Column(name = "bookname")
private String bookName;
// 不含大写的就不用写,只要你和表中同名即可
private String author;
成功!
记住book0_
表名是没有问题的;应该让含有大写的列名的@Colume(name = "全小写"
)