Java 持久化实体对象时休眠IllegalArgumentException:无法设置字段';id';到实体对象?

Java 持久化实体对象时休眠IllegalArgumentException:无法设置字段';id';到实体对象?,java,hibernate,jpa,persistence,Java,Hibernate,Jpa,Persistence,我试图持久化一个实体对象,但我得到了一个讨厌的IllegalArgumentException。查看stacktrace没有给我多少信息。hibernate试图将实体对象的id字段设置为实际实体 以下是stacktrace: Caused by: org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private java.lang.Long com.hosting.hostingin

我试图持久化一个实体对象,但我得到了一个讨厌的IllegalArgumentException。查看stacktrace没有给我多少信息。hibernate试图将实体对象的id字段设置为实际实体

以下是stacktrace:

Caused by: org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private java.lang.Long com.hosting.hostinginterface.spring.user.User.id] by reflection for persistent property [com.hosting.hostinginterface.spring.user.User#id] : com.hosting.hostinginterface.spring.user.User@246a5eb6
    at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:75) ~[hibernate-core-6.0.0.Alpha3.jar:6.0.0.Alpha3]
    at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:5411) ~[hibernate-core-6.0.0.Alpha3.jar:6.0.0.Alpha3]
    at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:5036) ~[hibernate-core-6.0.0.Alpha3.jar:6.0.0.Alpha3]
    at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:292) ~[hibernate-core-6.0.0.Alpha3.jar:6.0.0.Alpha3]
    at org.hibernate.event.internal.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:529) ~[hibernate-core-6.0.0.Alpha3.jar:6.0.0.Alpha3]
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:102) ~[hibernate-core-6.0.0.Alpha3.jar:6.0.0.Alpha3]
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:62) ~[hibernate-core-6.0.0.Alpha3.jar:6.0.0.Alpha3]
    at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:108) ~[hibernate-core-6.0.0.Alpha3.jar:6.0.0.Alpha3]
    at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:680) ~[hibernate-core-6.0.0.Alpha3.jar:6.0.0.Alpha3]
    ... 76 common frames omitted
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field com.hosting.hostinginterface.spring.user.User.id to com.hosting.hostinginterface.spring.user.User
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167) ~[na:1.8.0_231]
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171) ~[na:1.8.0_231]
    at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58) ~[na:1.8.0_231]
    at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36) ~[na:1.8.0_231]
    at java.lang.reflect.Field.get(Field.java:393) ~[na:1.8.0_231]
    at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:71) ~[hibernate-core-6.0.0.Alpha3.jar:6.0.0.Alpha3]
    ... 84 common frames omitted
这是我的实体类:

@Entity
public class User {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE)
  @Column(name = "id", updatable = false, nullable = false)
  private Long id;

  @Column(name = "username", nullable = false)
  private String userName;

  @Column(name = "firstName", nullable = false)
  private String firstName;

  @Column(name = "lastName", nullable = false)
  private String lastName;

  private LocalDate birthday;

  @Column(name = "birthdate", nullable = false)
  private String birthdayText;

  public User() {
  }

  @Contract(pure = true)
  public User(String userName, String firstName, String lastName, @NotNull LocalDate birthday) {
    this.userName = userName;
    this.firstName = firstName;
    this.lastName = lastName;
    this.birthday = birthday;
    birthdayText = birthday.toString();
  }

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public String getFirstName() {
    return firstName;
  }

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }

  public String getLastName() {
    return lastName;
  }

  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  public LocalDate getBirthday() {
    return birthday;
  }

  public void setBirthday(LocalDate birthday) {
    this.birthday = birthday;
  }

  public String getBirthdayText() {
    return birthdayText;
  }

  public void setBirthdayText(String birthdayText) {
    this.birthdayText = birthdayText;
  }

  public Long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }
}

更改id的生成方法似乎无法解决此错误,因此我没有可能的答案…

请尝试对
id
字段执行此操作

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
数据库表中是否有
生日
列?我建议它应该有
@Transient
不保存到数据库中


您可以尝试的另一件事是排除
spring boot devtools

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools</artifactId>
  <optional>true</optional>
</dependency>

org.springframework.boot
弹簧靴开发工具
真的

id
字段尝试此操作

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
数据库表中是否有
生日
列?我建议它应该有
@Transient
不保存到数据库中


您可以尝试的另一件事是排除
spring boot devtools

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools</artifactId>
  <optional>true</optional>
</dependency>

org.springframework.boot
弹簧靴开发工具
真的

ID的getter和setter都应该使用类型
Long
。我将setter更改为Long,但仍然得到相同的错误。Hibernate版本?我的版本是6.0.0 Alpha3 Hibernate版本更高版本4.1.9中存在错误(不确定)。将你的hibernate版本更改为4.1.9你的getter和你的ID setter都应该使用类型
Long
。我将setter更改为Long,但仍然得到相同的错误。hibernate版本?我的版本是6.0.0 Alpha3这是hibernate版本更高版本4.1.9中的错误(不确定)。将您的hibernate版本更改为4.1.9谢谢您提醒我生日:)不幸的是,更改生成类型后仍会引发异常。您可以尝试的另一件事是排除
spring boot devtools
。我已经编辑了答案我也做了同样的操作,不幸的是没有成功。谢谢你提醒我生日:)不幸的是,在更改生成类型后仍然会引发异常。你可以尝试排除
spring boot devtools
。我编辑了答案我也做了同样的事,不幸的是没有成功。