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
[code]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 authors;
private List majorSubtopic;
private List minorSubtopic;
private List references;
private List 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;
}
}
[/code]
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.
[code]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;
}
}
[/code]
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!