Проблема сохранения встроенной карты в режиме гибернации

#java #hibernate

#java #переход в спящий режим

Вопрос:

У меня возникли проблемы с сохранением встроенных коллекций. Я придумал это сумасшедшее решение, потому что хотел, чтобы мои лениво загруженные модели сортировались на основе полей в ресурсах.

У меня есть три таблицы:

  • активы (идентификатор)
  • assets_resources (идентификатор актива, идентификатор ресурса, первичное изображение)
  • ресурсы (идентификатор, logical_name)

Я определил таблицы с аннотациями hibernate следующим образом: Assets.java:

 @Entity
@Table(name = "assets")
public class Asset implements java.io.Serializable {
@OneToMany
@Cascade(CascadeType.ALL)
@JoinTable(
name="assets_resources"
, joinColumns=@JoinColumn(name="asset_id")
, inverseJoinColumns=@JoinColumn(name="resource_id")
)
@MapKeyColumn(name="asset_id")
@OrderBy("logical_name")
private Map<AssetResource, Resource> resources;
public Map<AssetResource, Resource > getResources() {return resources;}
public void setResources(Map<AssetResource, Resource> resources) {this.resources = resources;}
}
  

assetResource.java

 @Embeddable
public class AssetResource {
private Boolean primary_image;
public Boolean getPrimaryImage() {return primary_image;}
public void setPrimaryImage(Boolean primary_image) {this.primary_image = primary_image;}

private Long id;
public Long getId() {return id;}
}
  

resource.java

 @Entity
@Table(name="resources")
public class Resource implements java.io.Serializable {
...
public String logical_name;
public String getLogicalName() {return logical_name;}
public void setLogicalName(String logical_name) { this.logical_name = logical_name;}
}
  

Я могу выполнить итерацию, хотя лениво загруженные карты в моих контроллерах, но, похоже, я не могу сохранить / обновить встроенные поля. в частности, я не могу обновить поле primary_image.


Эта ссылка демонстрирует, что я пытался сделать.

Ответ №1:

Можете ли вы сохранить значение атрибута в базе данных. Потому что я думаю, что вы не сможете сохранить значение, поскольку вы не сопоставили его с каким-либо столбцом в базе данных. Попробуйте removind Emmbedded, а затем добавьте атрибуты таблицы и столбца..

Комментарии:

1. Это то, с чего я начал, но я не смог выполнить сортировку непосредственно из модели. Я думаю, что ответ лежит в этом сообщении в блоге . В частности, там, где Алекс говорит «очень важно переопределить equals () и hashCode ()», но, к сожалению, у меня не хватает времени для дальнейшего изучения этого, и я вернусь к стандартным моделям и использую метод DAO для получения отсортированных результатов.