Dúvida ao utilizar @Column(unique=true)

1 resposta
rafael.espiritosanto

Caros colegas,

tenho que fazer o parser de um documento XML e inserir as informações no MySQL.
Modelei as classes Java em um formato semelhante a estrutura do XML.

Este é o modelo do documento que contém as informações do XML
package br.ufrj.cos.bri.model;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;

@Entity
public class DocumentModel {
	private long id;
	private String paperNumber;
	private String recordNumber;
	private String medlineNumber;
	private String title;
	private String source;
	private String abstractText;
	private List<Author> authors;
	private List<Subtopic> majorSubtopic;
	private List<Subtopic> minorSubtopic;
	private List<Cite> references;
	private List<Cite> citations;
	
	@Id @GeneratedValue
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getPaperNumber() {
		return paperNumber;
	}
	public void setPaperNumber(String paperNumber) {
		this.paperNumber = paperNumber;
	}
	public String getRecordNumber() {
		return recordNumber;
	}
	public void setRecordNumber(String recordNumber) {
		this.recordNumber = recordNumber;
	}
	public String getMedlineNumber() {
		return medlineNumber;
	}
	public void setMedlineNumber(String medlineNumber) {
		this.medlineNumber = medlineNumber;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getSource() {
		return source;
	}
	public void setSource(String source) {
		this.source = source;
	}
	@Lob
	public String getAbstractText() {
		return abstractText;
	}
	public void setAbstractText(String abstractText) {
		this.abstractText = abstractText;
	}
	@ManyToMany
	public List<Author> getAuthors() {
		return authors;
	}
	public void setAuthors(List<Author> authors) {
		this.authors = authors;
	}
	@OneToMany
	public List<Subtopic> getMajorSubtopic() {
		return majorSubtopic;
	}
	public void setMajorSubtopic(List<Subtopic> majorSubtopic) {
		this.majorSubtopic = majorSubtopic;
	}
	@OneToMany
	public List<Subtopic> getMinorSubtopic() {
		return minorSubtopic;
	}
	public void setMinorSubtopic(List<Subtopic> minorSubtopic) {
		this.minorSubtopic = minorSubtopic;
	}
	@OneToMany
	public List<Cite> getReferences() {
		return references;
	}
	public void setReferences(List<Cite> references) {
		this.references = references;
	}
	@OneToMany
	public List<Cite> getCitations() {
		return citations;
	}
	public void setCitations(List<Cite> citations) {
		this.citations = citations;
	}
}
Estou com dúvidas em como realizar a persistência da classe Author. Como um autor pode aparecer em vários documentos, faz sentido referenciar o mesmo author nos documentos em que este consta como autor. Sendo assim, coloquei a restrição na classe Author.
package br.ufrj.cos.bri.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Author {
	private long id;
	private String name;
	
	@Id @GeneratedValue
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	
	@Column(unique=true)
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

Quando encontro um objeto com o mesmo nome de um previamente persistido, é lançada uma exceção informando chave duplicada.
Daí surge a minha dúvida. Quando eu for persistir um Author que tenha sido persistido anteriormente, como posso fazer para que o novo objeto a ser inserido faça referência ao antigo e ao mesmo tempo continue mantendo as
referências de forma correta na classe Java.

Obrigado!

1 Resposta

rafael.espiritosanto

Resolvi o problema utilizando um Map onde a chave é o nome do autor e o objeto é a instância da classe Author.

Abraço!

Criado 21 de março de 2009
Ultima resposta 21 de mar. de 2009
Respostas 1
Participantes 1