当前位置: 首页 > 知识库问答 >
问题:

如何在不定义主键字段的情况下使用实体管理器插入记录?

龚迪
2023-03-14

我试图使用实体类和实体管理器将一条记录插入数据库(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个答案

穆歌者
2023-03-14

有没有一种方法告诉实体管理器尝试不带ID字段的insert,而使用NULL值?

当然可以。您需要删除@entity定义中id字段的@notnull批注,并删除以下行:

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

来自方法newcontributor()。这是因为@NotNull注释在JPA堆栈中强制执行验证检查。这并不意味着该字段在数据库级别上不为空。请看这里关于这个问题的讨论。

其余的代码看起来很好。

 类似资料:
  • 问题内容: 我试图将 1,500,000 条记录插入表中。在插入过程中遇到表锁定问题。所以我想出了下面的批处理插入。 我在表上有聚簇索引。部分只是为了限制插入的记录再次插入表中 我做对了,这样可以避免表锁定吗?还是有更好的方法。 注意: 批处理和不批处理插入所花费的时间或多或少相同 问题答案: 锁升级根本不可能与语句的一部分有关。 插入大量行是自然的结果 当使用ALTER TABLE SET LO

  • 问题内容: 在Mongoose的早期版本(针对node.js)中,可以选择使用它而不定义架构 但是在当前版本中,“ noSchema”功能已被删除。我的架构可能会经常更改,并且实际上不适合已定义的架构,因此,是否有一种新的方式在猫鼬中使用无架构的模型? 问题答案: 我想这就是您要寻找猫鼬严密的东西 选项:严格 严格选项(默认情况下启用)可确保未在架构中指定的添加到模型实例的值不会保存到数据库中。

  • 我正在使用实体框架映射一些表,但除非我声明一些列作为主键,否则我无法这样做。 这里的问题是,数据库中的表没有主键,并且有数百万行。我没有创建新Id列的权限。 Obs:如果我将属性添加到诸如

  • 问题内容: 我在数据库中有以下架构(简化) 我在问是否有任何方法可以为主表定义实体,以便直接使用其他表中的标签,即无需为其他表定义实体。 我无法更改数据库架构,这真的很糟糕(到处都有多个标签/代码对,在多个表中定义)。而且,如果有可能,此解决方案将使我的代码保持简单,因为我真的不需要这些其他实体。 我想这会导致类似的结果: 在此先感谢您的帮助! 问题答案: 另一种可能性是使用注释从另一个表中获取值

  • 问题内容: 在和中使用时,我在大纲自定义样式方面取得了成功。 否则- 仅存在底边框-即使使用中的键/类也不起作用。 我什至试过了。 问题答案: 为了确定如何执行此操作,请查看Input中如何完成默认样式是有帮助的。 用于默认样式和悬停样式,并用于焦点样式。 这是一个如何设置样式的示例:

  • 我对EJB的概念非常陌生。我正在尝试使用实体类将前端的值插入到数据库中,但每次我这样做时,我都会收到此错误: 这是我的实体类: 我使用的是seam 2.2.1、EJB 3和Oracle 10g。 请帮助我解决此错误。