【问题标题】:eclipse Duplicate generator named "ID_GENERATOR" defined in this persistence uniteclipse 在此持久性单元中定义的名为“ID_GENERATOR”的重复生成器
【发布时间】:2014-01-06 00:43:42
【问题描述】:

我目前遇到了在迁移到 eclipse-jee-kepler 之前没有的问题。我有什么:

我有 2 个类,基类和扩展类:

public abstract class BaseEntity implements Serializable {
    @Id
    @GeneratedValue(generator = "ID_GENERATOR")
    @Column(name = "ID")
    private Long id;
}

@Entity
@Table(name = "CUSTOMER")
@SequenceGenerator(name = "ID_GENERATOR", sequenceName = "CUSTOMER_SEQ")
public class Customer extends BaseEntity {
}

之前我没有这个验证错误,但现在 eclipse 正在抛出它。我可以成功编译、构建和部署,但是错误标记使您很难在真正遇到编译错误时查明编译错误。

错误似乎很明显,这是因为我在所有扩展类上都有 ID_GENERATOR。我的问题: 1.) 我可以忽略这个错误吗? 2.) 有什么解决办法吗?可能使用不同的方法。

【问题讨论】:

  • 您的BaseEntity 是@Entity 还是@MappedSuperClass?
  • 这是一个@MappedSuperClass。

标签: eclipse jpa jpa-2.0


【解决方案1】:

我发现了这个问题,它更像是一个 Eclipse JPA 验证设置。禁用:

  1. 选择窗口»首选项
  2. 展开 Java 持久性 » JPA » 错误/警告
  3. 点击查询和生成器
  4. 定义的重复生成器设置为:Ignore
  5. 点击确定应用更改并关闭对话框

您也可以将值设置为Warning 而不是Ignore

【讨论】:

  • 是否真的会导致错误发生,或者两个实体无意中使用了相同的生成器序列?我问是因为隐藏警告/错误不会使情况消失:)
【解决方案2】:

对于 MyEclipse

1.Windows->首选项

2.Myeclipse->验证->JPA

3.查询和生成器

生成器没有在持久化单元中定义;

【讨论】:

    【解决方案3】:

    生成器的名称在生成器中必须是唯一的,并且可以被一个或多个类引用。

    javadoc 清楚地说:

    (必需)一个唯一的生成器名称,可以被一个或 更多类成为主键值的生成器。

    根据 java JPA 2.1 规范(JPA 2.1 的 SequenceGenerator 注释 - 第 11.1.48 节):

    生成器名称的范围对于持久化单元是全局的 (适用于所有生成器类型)

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      相关资源
      最近更新 更多