如何使用实体管理器插入记录而不定义主键字段?

时间:2012-05-18 07:58:43

标签: java persistence java-ee-6 entitymanager

我尝试使用Entity Class和Entity Manager将记录插入数据库(MySQL)。但其中一个字段是自动递增主键,因此除非我手动提供值,否则插入不成功。

public boolean newContributor(String name, String email, String country, Integer contactable, String address) {
        Contributors contributor = new Contributors(); //entity class
        contributor.setId(??????); //this is Primary Key field and is of int datatype
        contributor.setName(name);
        contributor.setEmail(email);
        contributor.setCountry(country);    
        contributor.setContactable(contactable);
        contributor.setAddress(address);

        em.persist(contributor);
        return true;
    }

如何解决这样的问题?有没有办法告诉实体管理器在没有ID字段的情况下尝试插入,而是使用NULL值。

更新: 以下是定义id

的实体类的一部分
...
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@NotNull
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
....

1 个答案:

答案 0 :(得分:1)

  

有没有办法告诉实体经理尝试插入没有ID字段并改为使用NULL值?

不确定。您需要删除@NotNull定义中id字段的@Entity注释,并删除该行:

contributor.setId(??????);

来自方法newContributor()。原因是@NotNull注释在JPA堆栈中强制执行验证检查。这并不意味着该字段在数据库级别为NOT NULL。请参阅here关于此问题的讨论。

其余的代码看起来很好。