Hibernate: обновление вложенного объекта
От: phoenix78 Украина  
Дата: 29.08.08 12:13
Оценка:
Основной класс MyMessage.
@Entity
@Table(name="messages")
public class MyMessage implements Serializable {
    private String messageID;   

//  Список, который сохраняется в связанной таблице
    private List<ParsedResult> parsedResults = new ArrayList<ParsedResult>();
    
//  за уникальностью message_id следим самостоятельно
    @Id
    @Column(name = "message_id")
    public String getMessageID() {
        return messageID;
    }

    public void setMessageID(String headerMessageID) {
        this.messageID = headerMessageID;
    }

    @OneToMany (cascade=CascadeType.ALL)
    @JoinColumn(name = "original_id", nullable = false, updatable=true)
    public List<ParsedResult> getParsedResults() {
        return parsedResults;
    }

    public void setParsedResults(List<ParsedResult> parsedResults) {
        this.parsedResults = parsedResults;
    }
}


Полем MyMessage является список объектов класса ParsedResult.

@Entity
@Table (name="parsed_messages")
public class ParsedResult implements Serializable{   
    
    private Long resultId;      
    private String myKey;    
    private String myValue; 

    @Id  
    @Column(name="result_id")
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Long getResultId() {
        return resultId;
    }        
}


После создания объекта класса MyMessage и инициализации всех его полей он сохраняется используя hibernate'вский метод saveOrUpdate(MyMessage mess).

-------------------------------------------------------------------
Проблема заключается в том, что при сохранении объекта класса MyMessage с уже существующим @Id происходит обновление строк только в таблице "messages", а в таблицу "parsed_messages" строки добавляются.

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

Заранее спасибо за совет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.