【问题标题】:Hibernate is ignoring a column during insertsHibernate 在插入期间忽略列
【发布时间】:2013-07-06 11:05:18
【问题描述】:

我有一个这样的实体:

@Entity
@Table(name = "PERSON_TB")
public class Person implements Serializable {

   private static final long serialVersionUID = 32423423432434;

   @Id
   @Column(name = "ID")
   private Long personId;

   @Id
   @Column(name = "VALUE")
   private String value;

   @Column(name = "NAME")
   private String name;

   @Transient
   Address address;
   //getters / setters
}

这是我创建实体的代码:

 public Person createPerson( long id, String name, String value ) {
   Person p = new Person();
   p.setId(id);
   p.setName(name);
   p.setValue(value);
   return p;
 }

用不同的方法:

  personCrudSvc.create(createPerson(192L, "Joe", "xyz");

这是错误:

  java.sql.SQLException: Attempt to insert null into a non-nullable column: column: VALUE  
 table: PERSON_TB in statement [insert into PERSON_TB (NAME, ID) values (?, ?)]

不确定这是否与此错误有关:

Hibernate Bug

我还有另外两个这样创建的表,这些都很好。

【问题讨论】:

  • 很明显,我可以看到,Hibernate 将错误的查询推送到数据库。插入 PERSON_TB (NAME, ID) 值 (?, ?) 应该插入 PERSON_TB (NAME, ID, VALUE) 值 (?, ?, ?)

标签: java hibernate jpa entity field


【解决方案1】:

试试这个

@Entity
@Table(name = "PERSON_TB")
public class Person implements Serializable {

   private static final long serialVersionUID = 32423423432434;

   @Id
   @Column(name = "personId")
   private Long personId;

   @Id
   @Column(name = "VALUE")
   private String value;

   @Column(name = "NAME")
   private String name;

   @Transient
   Address address;
   //getters / setters
}

【讨论】:

  • 有什么区别?字段名称为 ID 时如何将名称更改为“personId”?
  • 这不是您的代码的问题。这是休眠的问题。但是这种解决方法可能对您有用。否则从注释转移到映射 xml。我知道没有其他解决方案
  • Hibernate 中的这个错误是什么?你能详细说明一下吗?
猜你喜欢
  • 2021-06-08
  • 1970-01-01
  • 2014-01-25
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
  • 2012-08-11
  • 2019-03-11
  • 1970-01-01
相关资源
最近更新 更多