【问题标题】:Hibernate mapping a Map (HashMap) always add new row instead to updateHibernate 映射一个 Map (HashMap) 总是添加新行而不是更新
【发布时间】:2018-05-28 18:50:49
【问题描述】:

我正在尝试制作一个实体来支持本地化。

实体 - RoadAssistance

@Entity
@DynamicUpdate
public class RoadAssistance{

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "id")
  private Long id;



 /* Localization ....*/
 @MapKeyColumn(name = "locale")
 @MapKeyType(value = @Type(type = "java.util.Locale"))
 @OneToMany(cascade = CascadeType.ALL, mappedBy = "roadAssistance")
 Map<Locale, RoadAssistanceI18n> roadAssistanceI18n = new HashMap<>();


 /*Map Helper method for locale*/
 public RoadAssistanceI18n getRoadAssistanceI18n(Locale locale) {
    return roadAssistanceI18n.get(locale);
 }

 /// GETTERS AND SETTRE // W/O equals and hashCode implementation..

}

实体 - RoadAssistanceI18n

@Entity
@Table(name = "road_assistance_i18n")
public class RoadAssistanceI18n{

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "id")
   private Long id;

  private String address;

  @Lob
  private String description;

  @ManyToOne
  RoadAssistance roadAssistance;

  /// GETTERS AND SETTRE // W/O equals and hashCode implementation..
}

在视图(Thymeleaf)中我有以下内容

<div class="col-sm-8 offset-sm-2 mt-3">
  <textarea data-th-field="*{roadAssistanceI18n[__${#locale}__].description}" rows="10" class="form-control" id="description" name="description"></textarea>
</div>

对于持久性,我使用的是 Spring 数据。 一切都很完美,我可以添加/查看不同语言的描述,它可以工作。问题是当我更新描述时,在数据库表中我每次更新都会获得新行。我正在使用来自持久实体的引用并从那里覆盖地图..

【问题讨论】:

    标签: hibernate spring-data-jpa hibernate-mapping


    【解决方案1】:

    从您的 HTML 中,我看不到您发送当前编辑实体 ID 的部分。问题可能是您正在持久化 ID 为 null 的 RoadAssistanceI18n 实体,这将导致数据库中出现新条目。如果您正确设置了 id,Hibernate 将更新值而不是创建新条目。

    【讨论】:

    • 你是对的。处理此类 ID 的正确方法是什么?在哪里存储 ID?
    • 通常您会在隐藏的输入字段中发送该信息:
    • 好的,但是如果有人使用 DevTools 更改 ID?我应该在后端做很多检查,这会产生很多开销吗?
    • 您总是需要检查后端。这尤其适用于 Web 应用程序,因为它们很容易修改,但通常您不能信任用户输入。
    猜你喜欢
    • 2019-10-30
    • 2011-07-13
    • 2016-09-03
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    相关资源
    最近更新 更多