Hibernate mapping a Map (HashMap) всегда добавляет новую строку вместо обновления - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь заставить Entity поддерживать локализацию.

Сущность - 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>

enter image description here

Для настойчивости я использую данные Spring.Все работает отлично, и я могу добавить / просмотреть описание на разных языках, и это работает.Проблема в том, что когда я обновляю описание, в таблице базы данных я получаю новые строки для каждого обновления.Я работаю со ссылкой из персистентного объекта и переопределяю карту оттуда ..

1 Ответ

0 голосов
/ 30 мая 2018

Из вашего HTML я не вижу ту часть, куда вы отправляете id редактируемой в данный момент сущности.Возможно, проблема в том, что вы сохраняете сущность RoadAssistanceI18n, где идентификатор равен нулю, что приведет к новой записи в базе данных.Если вы правильно установили идентификатор, Hibernate обновит значения вместо создания новой записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...