嘿大家我有一个spring boot rest api,每个键和值都有重复的结果,如下面的代码
这是我的对象
{
id: 2,
Nom: "ee",
Prenom: "az",
Profil: "RC",
Pseudo: "aze",
Password: null,
role: null,
password: null,
nom: "ee",
prenom: "az",
profil: "RC",
pseudo: "aze"
},
{
id: 3,
Nom: "xx",
Prenom: "xxx",
Profil: "dataa",
Pseudo: "data",
Password: null,
role: null,
password: null,
nom: "xx",
prenom: "xxx",
profil: "dataa",
pseudo: "data"
},
{
你可以看到每一列都是重复的,一个是大写的第一个字母,另一个是小写的
这是我的班级:
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="\"UTILISATEUR\"")
public class Utilisateur {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="\"IdUtilisateur\"")
public Long id ;
@Column(name="\"Nom\"")
public String Nom ;
@Column(name="\"Prenom\"")
public String Prenom ;
@Column(name="\"Profil\"")
public String Profil ;
@Column(name="\"Pseudo\"")
public String Pseudo ;
@Column(name="\"Password\"")
public String Password ;
@ManyToOne
@JoinColumn(name="\"id_role\"")
public Role role ;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNom() {
return Nom;
}
public void setNom(String nom) {
Nom = nom;
}
public String getPrenom() {
return Prenom;
}
public void setPrenom(String prenom) {
Prenom = prenom;
}
public String getProfil() {
return Profil;
}
public void setProfil(String profil) {
Profil = profil;
}
public String getPseudo() {
return Pseudo;
}
public void setPseudo(String pseudo) {
Pseudo = pseudo;
}
public String getPassword() {
return Password;
}
public void setPassword(String password) {
Password = password;
}
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
public Utilisateur(String nom, String prenom, String profil, String pseudo, String password,
Role role) {
super();
Nom = nom;
Prenom = prenom;
Profil = profil;
Pseudo = pseudo;
Password = password;
this.role = role;
}
public Utilisateur() {
super();
}
我正在使用我的数据库中的postgres,这是我的代码
CREATE TABLE "UTILISATEUR"
(
"IdUtilisateur" serial NOT NULL,
"Nom" character varying(50),
"Prenom" character varying(50),
"Profil" character varying(50),
"Pseudo" character varying(20),
"IdSite" integer DEFAULT 0,
"Password" character varying(1024),
id_role integer,
)
最后这是我的application.propreties
spring.datasource.url = jdbc:postgresql://localhost/baseecu
spring.datasource.username = postgres
spring.datasource.password =root
spring.datasource.driverClassName=org.postgresql.Driver
spring.jpa.database = MYSQL
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto= update
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.naming_strategy: org.hibernate.cfg.EJB3NamingStrategy
我想也许这是一个jdbc问题,因为我使用postgres 9.2和jdbc是9.1我在JPA Uppercase table names之前的方言有问题之后我试图让它工作,现在我得到了这个
任何帮助或指南都将不胜感激
答案 0 :(得分:3)
进行以下更改,以使Entity类遵循POJO类规则:
1.制作公开私有变量,如变更
public String Nom ;
到private String Nom;
1.更改方法实现,如下所示。变化
public void setNom(String nom) {
Nom = nom;}
到
public void setNom(String nom) {
this.Nom = nom;}
答案 1 :(得分:2)
使用以下代码替换实体类中的字段声明部分:
...
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="\"IdUtilisateur\"")
private Long id;
@Column(name="\"Nom\"")
private String Nom;
@Column(name="\"Prenom\"")
private String Prenom;
@Column(name="\"Profil\"")
private String Profil;
@Column(name="\"Pseudo\"")
private String Pseudo;
@Column(name="\"Password\"")
private String Password;
@ManyToOne
@JoinColumn(name="\"id_role\"")
private Role role;
...
答案 2 :(得分:0)
我建议你遵循适当的变量和方法的java bean标准命名约定。
将成员变量保密。
JSON序列化程序适用于公开公开的字段和getter方法。由于您已将您的成员变量命名为以大写字母开头,并且还有符合标准java命名约定的getter。因此,Json序列化程序将它们检测为要序列化的两个不同属性。
答案 3 :(得分:0)
为了避免这些错误,您还可以在pom.xml中使用lombok依赖项,如下所示:
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.14</version>
</dependency>
您的实体类如下:
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name="\"UTILISATEUR\"")
public class Utilisateur {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="\"IdUtilisateur\"")
public Long id ;
@Column(name="\"Nom\"")
public String Nom ;
@Column(name="\"Prenom\"")
public String Prenom ;
@Column(name="\"Profil\"")
public String Profil ;
@Column(name="\"Pseudo\"")
public String Pseudo ;
@Column(name="\"Password\"")
public String Password ;
@ManyToOne
@JoinColumn(name="\"id_role\"")
public Role role ;
}
所以在这里,
@Data将创建所有的getter和setter。
@NoArgsConstructor将创建一个无参数构造函数。
@AllArgsConstructor将创建一个all args构造函数。
因此,您的代码将更清晰,更不容易出错。