Hibernate和@ElementCollection:重复键

时间:2013-10-06 23:43:31

标签: java hibernate jpa

我有一个cronjob在运行,每天计算一次很多东西。

有2个参与者。

第一个是“KPI”实体,包含有关用户活动的信息。 每个KPI实体与用户ofc相关的是1:1。 KPI实体本身与1:n相关,更详细的深入分析。 (它是KPI实体中的元素集合。)

Simpliefied:

@Entity
@Table(name = DBConstants.KPI_TABLE_NAME)
@NamedQueries({ @NamedQuery(name = "kpi.byUser", query = "SELECT k FROM KPIEntity k WHERE k.user = :user"),
        @NamedQuery(name = "kpi.all", query = "SELECT k FROM KPIEntity k"),
        @NamedQuery(name = "kpi.allactiveusers", query = "SELECT k FROM KPIEntity k WHERE k.user.accountActive = :accountstatus") })
public class KPIEntity implements Serializable {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private int id;

   @Column
   private long tasksCompleted;

    @ElementCollection(targetClass = java.lang.Long.class, fetch = FetchType.EAGER)
    @MapKeyClass(java.lang.String.class)
    @MapKeyColumn(name = "taskKey")
    @CollectionTable(name = "KPItaskDrilldown", joinColumns = @JoinColumn(name = "id"))
    @Column(name = "count")
    private Map<String, Long> tasksCompletedPerType;
}

所以,我假设hibernate创建了2个表:

“的KPI”:

id | tasksCompleted
1  | 250
2  | 50

KPItaskDrilldown

kpi_id | tasksCompletedPerType | count
1      | A                     | 20
1      | B                     | 75
...

这“工作” - 第一次运行。但如果cronjob再次运行,我会收到Duplicate-Key-MySQL-Errors。

我注意到,Hibernate在深入研究表上创建了一个复合键:kpi_id, tasksCompletedPerType。到目前为止这似乎很好。

但即使我对KPI实体进行UPDATE,Hibernate似乎也试图将值插入到第二个表中 - 由于约束而失败。

有什么想法吗?

0 个答案:

没有答案