Spring JPA 休眠重复
Spring JPA Hibernate duplicate
嗨,我是这个世界的新手。
我正在使用 spring jpa hibernate 创建自己的应用程序。
我有一个实体 class。它通常有效,但它会重复属性。
我的代码如下所示:
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.validation.constraints.NotNull;
@Entity
public class Event {
@Id
@GeneratedValue
private Integer id;
public Integer getId() {
return id;
}
@Column(nullable = false)
public void setId(Integer id) {
this.id = id;
}
/*------------------------------ title ------------------------*/
private String title;
@Column(nullable = false)
public String getTitle() {
return title;
}
@Column(nullable = false)
public void setTitle(String title) {
this.title = title;
}
/* [Note] I have two extra ids : event_id, eventId
- so these are not the case of the duplication. */
/*------------------- event_id -----------------------------*/
private String event_id;
public String getEvent_id() {
return event_id;
}
public void setEvent_id(String event_id) {
this.event_id = event_id;
}
/*-------------- eventId -------------------------------------*/
@Column(unique = true)
private String eventId;
public String getEventId() {
return eventId;
}
public void setEventId(String eventId) {
this.eventId = eventId;
}
/*------------------------------ publishedDate ------------------------------------------*/
private String publishedDate;
public String getPublishedDate() {
return publishedDate;
}
@Column(nullable = false)
public void setPublishedDate(String publishedDate) {
this.publishedDate = publishedDate;
}
/*--------------------------------- endTime -----------------------------------*/
private String endTime;
public String getEndTime() {
return endTime;
}
@Column(nullable = false)
public void setEndTime(String endTime) {
this.endTime = endTime;
}
/*-------------------------------- user ------------------------------------------*/
@ManyToOne
@JoinColumn(name="user_id")
private User user;
public User getUser() {
return user;
}
@Column(nullable = false)
public void setUser(User user) {
this.user = user;
}
然后当我检查JPA图时,它有几个属性重复。
我添加了我的 JPA 图图像(红色部分是重复的)
这是我使用 java 编程的第一个应用程序。
所以请理解,即使我阅读了 spring jpa 的文档,
很难弄清楚我在代码中到底做错了什么。
有任何想法吗?提前致谢。
问题是 JPA 需要字段级注释或访问器 (getters/setters) 注释。但是,您同时使用两者,这基本上是不允许的。从访问器中删除所有他的注释,只将它们放在字段上。
关于 Java 编程(样式)的小提示将您的字段放在 类 之上而不是访问器之间。
@Entity
public class Event {
@Id
@GeneratedValue
private Integer id;
@Column(unique = true)
private String eventId;
private String event_id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String publishedDate;
@Column(nullable = false)
private String endTime;
@ManyToOne
@JoinColumn(name="user_id")
@Column(nullable = false)
private User user;
// Getters / Setters omitted
}
去掉accessors的注解,你真的要设置id
吗?我希望不会,所以您可能想要删除 setId
方法。
如评论中所述,您的问题是您对同一个属性使用了两个注释,首先在字段中,然后在其 getter/setter 中,因此您只能使用其中一个,例如:
@Id
@GeneratedValue
private Integer id;
public Integer getId() {
return id;
}
@Column(nullable = false)
public void setId(Integer id) {
this.id = id;
}
应该是:
@Id
@GeneratedValue
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
这里使用 getter 和 setter 的注释是错误的:
@Column(nullable = false)
public String getTitle() {
return title;
}
@Column(nullable = false)
public void setTitle(String title) {
this.title = title;
}
注:
因此,为了避免这种情况,您必须在以下两者之间做出选择:
在字段中使用注释。
并将它们与其 setter 一起使用。
Spring 引导 2.0.0.M5、JPA、Hibernate 5.2。11.Final
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "auto_gen")
@SequenceGenerator(name = "auto_gen", sequenceName = "customer_id_seq", allocationSize=1)
@Column(name = "id")
private Long id;
这是一个工作示例:
package hello;
import org.hibernate.annotations.Type;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name = "customer")
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "auto_gen")
@SequenceGenerator(name = "auto_gen", sequenceName = "customer_id_seq", allocationSize = 1)
@Column(name = "id")
private Long id;
@Column(name = "first_name")
//@Type(type="org.hibernate.type.StringType")
private String firstName;
@Column(name = "last_name")
//@Type(type="org.hibernate.type.StringType")
private String lastName;
protected Customer() {
}
public Customer(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
@Override
public String toString() {
return String.format("Customer[id=%d, firstName='%s', lastName='%s']", id, firstName, lastName);
}
}
嗨,我是这个世界的新手。 我正在使用 spring jpa hibernate 创建自己的应用程序。 我有一个实体 class。它通常有效,但它会重复属性。 我的代码如下所示:
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.validation.constraints.NotNull;
@Entity
public class Event {
@Id
@GeneratedValue
private Integer id;
public Integer getId() {
return id;
}
@Column(nullable = false)
public void setId(Integer id) {
this.id = id;
}
/*------------------------------ title ------------------------*/
private String title;
@Column(nullable = false)
public String getTitle() {
return title;
}
@Column(nullable = false)
public void setTitle(String title) {
this.title = title;
}
/* [Note] I have two extra ids : event_id, eventId
- so these are not the case of the duplication. */
/*------------------- event_id -----------------------------*/
private String event_id;
public String getEvent_id() {
return event_id;
}
public void setEvent_id(String event_id) {
this.event_id = event_id;
}
/*-------------- eventId -------------------------------------*/
@Column(unique = true)
private String eventId;
public String getEventId() {
return eventId;
}
public void setEventId(String eventId) {
this.eventId = eventId;
}
/*------------------------------ publishedDate ------------------------------------------*/
private String publishedDate;
public String getPublishedDate() {
return publishedDate;
}
@Column(nullable = false)
public void setPublishedDate(String publishedDate) {
this.publishedDate = publishedDate;
}
/*--------------------------------- endTime -----------------------------------*/
private String endTime;
public String getEndTime() {
return endTime;
}
@Column(nullable = false)
public void setEndTime(String endTime) {
this.endTime = endTime;
}
/*-------------------------------- user ------------------------------------------*/
@ManyToOne
@JoinColumn(name="user_id")
private User user;
public User getUser() {
return user;
}
@Column(nullable = false)
public void setUser(User user) {
this.user = user;
}
然后当我检查JPA图时,它有几个属性重复。 我添加了我的 JPA 图图像(红色部分是重复的)
这是我使用 java 编程的第一个应用程序。 所以请理解,即使我阅读了 spring jpa 的文档, 很难弄清楚我在代码中到底做错了什么。 有任何想法吗?提前致谢。
问题是 JPA 需要字段级注释或访问器 (getters/setters) 注释。但是,您同时使用两者,这基本上是不允许的。从访问器中删除所有他的注释,只将它们放在字段上。
关于 Java 编程(样式)的小提示将您的字段放在 类 之上而不是访问器之间。
@Entity
public class Event {
@Id
@GeneratedValue
private Integer id;
@Column(unique = true)
private String eventId;
private String event_id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String publishedDate;
@Column(nullable = false)
private String endTime;
@ManyToOne
@JoinColumn(name="user_id")
@Column(nullable = false)
private User user;
// Getters / Setters omitted
}
去掉accessors的注解,你真的要设置id
吗?我希望不会,所以您可能想要删除 setId
方法。
如评论中所述,您的问题是您对同一个属性使用了两个注释,首先在字段中,然后在其 getter/setter 中,因此您只能使用其中一个,例如:
@Id
@GeneratedValue
private Integer id;
public Integer getId() {
return id;
}
@Column(nullable = false)
public void setId(Integer id) {
this.id = id;
}
应该是:
@Id
@GeneratedValue
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
这里使用 getter 和 setter 的注释是错误的:
@Column(nullable = false)
public String getTitle() {
return title;
}
@Column(nullable = false)
public void setTitle(String title) {
this.title = title;
}
注:
因此,为了避免这种情况,您必须在以下两者之间做出选择:
在字段中使用注释。
并将它们与其 setter 一起使用。
Spring 引导 2.0.0.M5、JPA、Hibernate 5.2。11.Final
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "auto_gen")
@SequenceGenerator(name = "auto_gen", sequenceName = "customer_id_seq", allocationSize=1)
@Column(name = "id")
private Long id;
这是一个工作示例:
package hello;
import org.hibernate.annotations.Type;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name = "customer")
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "auto_gen")
@SequenceGenerator(name = "auto_gen", sequenceName = "customer_id_seq", allocationSize = 1)
@Column(name = "id")
private Long id;
@Column(name = "first_name")
//@Type(type="org.hibernate.type.StringType")
private String firstName;
@Column(name = "last_name")
//@Type(type="org.hibernate.type.StringType")
private String lastName;
protected Customer() {
}
public Customer(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
@Override
public String toString() {
return String.format("Customer[id=%d, firstName='%s', lastName='%s']", id, firstName, lastName);
}
}