4

我试图使用实体类和实体管理器将记录插入数据库(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 字段的情况下尝试插入并使用NULLvalue 代替。

更新:这是定义实体类的一部分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)
....
4

1 回答 1

1

有没有办法告诉实体管理器在没有 ID 字段的情况下尝试插入并改用 NULL 值?

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

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

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

其余的代码看起来不错。

于 2012-05-18T08:23:40.473 回答