У меня есть JPA сущности, как это:Map <String, String> с JPA
@Entity
@Table(name = "ATTRIBUTE")
public class Attribute {
//ID stuff
@Column(name = "NAME", nullable = false)
private String name;
@Column(name = "VALUE", nullable = false)
private String value;
//getters and setters
}
И другой объект:
@Entity
@Table(name = "ATTRIBUTE_GROUP")
public class AttributeGroup {
//ID stuff
@ElementCollection(fetch = FetchType.LAZY, targetClass = java.lang.String.class)
@CollectionTable(name = "ATTRIBUTE")
@MapKeyColumn(name = "NAME")
@Column(name = "VALUE")
private Map<String, String> attributes = new HashMap<>();
public void createAttribute(String name, String value) {
Attribute attribute = new Attribute();
attribute.setName(name);
attribute.setValue(value);
attribute.setAttributeGroup(this);
attributes.put(name, value);
}
public Map<String, String> getAttributes() {
return attributes;
}
}
Мне нужно иметь карту в AttributeGroup
лица, которое будет иметь Attribute
имя пользователя в качестве ключа и значение Attribute
в качестве значения.
Текущий подход не работает для меня. Когда я пытаюсь сохранить записи в базе данных, он генерирует исключение, в котором транзакция отмечена только как roolback. Я не знаю, если это даже способ записи, но если это не работает, очевидно, это не так.
Как я могу достичь этого в JPA, чтобы иметь карту в AttributeGroup
от Attribute
имя/значение парного объекта?
Я использую Hibernate через EntityManager.
Обязательно использовать аннотации спящего режима? мы не можем пойти для xml-сопоставления? –
Да, мне нужно придерживаться подхода JPA, спящий режим - это просто реализация, так как мы можем перейти на OpenJPA в будущем. – user2219247
Опубликовать полную трассировку стека исключения и код, вызывающий его. Кроме того, в чем смысл объекта атрибута? Вы, кажется, не используете его. Вы создаете новый атрибут в своем методе, но ничего не делаете с ним. –