2
There is the possibility of making a relationship @OneToMany
without Primary Key on the daughter table?
Follow my two entities.
Entity Noticia
:
@Entity
@Table(name = "NOTICIA")
@NamedQueries({
@NamedQuery(name = "Noticia.findAll", query = "SELECT n FROM Noticia n"),
@NamedQuery(name = "Noticia.findAllByDate", query = "SELECT n FROM Noticia n WHERE n.dhCadastro BETWEEN :startDate AND :endDate")
})
public class Noticia implements Serializable {
private static final long serialVersionUID = 1L;
@Id
//@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "cdNoticia")
private Long cdNoticia;
@Basic(optional = false)
@Column(name = "cdVeiculo")
private long cdVeiculo;
@Column(name = "nmAutor")
private String nmAutor;
@Column(name = "cdColunista")
private Short cdColunista;
@Basic(optional = false)
@Column(name = "cdSecao")
private short cdSecao;
@Column(name = "dsTitulo")
private String dsTitulo;
@Lob
@Column(name = "dsTexto")
private String dsTexto;
@Basic(optional = false)
@Column(name = "dsURL")
private String dsURL;
@Column(name = "cdHash")
private String cdHash;
@Basic(optional = false)
@Column(name = "dtNoticia")
@Temporal(TemporalType.DATE)
private Date dtNoticia;
@Basic(optional = false)
@Column(name = "hrNoticia")
@Temporal(TemporalType.TIME)
private Date hrNoticia;
@Column(name = "dhCadastro")
@Temporal(TemporalType.TIMESTAMP)
private Date dhCadastro;
@Basic(optional = false)
@Column(name = "idTipo")
private String idTipo;
@Basic(optional = false)
@Column(name = "idDigitalizada")
private String idDigitalizada;
@Column(name = "isTransicao")
private Integer isTransicao;
@Column(name = "isElasticSearch")
private Integer isElasticSearch;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "noticia", orphanRemoval = true)
private List<Noticiaimagem> noticiaimagemCollection = new ArrayList<Noticiaimagem>();
public Noticia() {
}
public Long getCdNoticia() {
return cdNoticia;
}
public void setCdNoticia(Long cdNoticia) {
this.cdNoticia = cdNoticia;
}
public long getCdVeiculo() {
return cdVeiculo;
}
public void setCdVeiculo(long cdVeiculo) {
this.cdVeiculo = cdVeiculo;
}
public String getNmAutor() {
return nmAutor;
}
public void setNmAutor(String nmAutor) {
this.nmAutor = nmAutor;
}
public Short getCdColunista() {
return cdColunista;
}
public void setCdColunista(Short cdColunista) {
this.cdColunista = cdColunista;
}
public short getCdSecao() {
return cdSecao;
}
public void setCdSecao(short cdSecao) {
this.cdSecao = cdSecao;
}
public String getDsTitulo() {
return dsTitulo;
}
public void setDsTitulo(String dsTitulo) {
this.dsTitulo = dsTitulo;
}
public String getDsTexto() {
return dsTexto;
}
public void setDsTexto(String dsTexto) {
this.dsTexto = dsTexto;
}
public String getDsURL() {
return dsURL;
}
public void setDsURL(String dsURL) {
this.dsURL = dsURL;
}
public String getCdHash() {
return cdHash;
}
public void setCdHash(String cdHash) {
this.cdHash = cdHash;
}
public Date getDtNoticia() {
return dtNoticia;
}
public void setDtNoticia(Date dtNoticia) {
this.dtNoticia = dtNoticia;
}
public Date getHrNoticia() {
return hrNoticia;
}
public void setHrNoticia(Date hrNoticia) {
this.hrNoticia = hrNoticia;
}
public Date getDhCadastro() {
return dhCadastro;
}
public void setDhCadastro(Date dhCadastro) {
this.dhCadastro = dhCadastro;
}
public String getIdTipo() {
return idTipo;
}
public void setIdTipo(String idTipo) {
this.idTipo = idTipo;
}
public String getIdDigitalizada() {
return idDigitalizada;
}
public void setIdDigitalizada(String idDigitalizada) {
this.idDigitalizada = idDigitalizada;
}
public Integer getIsTransicao() {
return isTransicao;
}
public void setIsTransicao(Integer isTransicao) {
this.isTransicao = isTransicao;
}
public Integer getIsElasticSearch() {
return isElasticSearch;
}
public void setIsElasticSearch(Integer isElasticSearch) {
this.isElasticSearch = isElasticSearch;
}
public List<Noticiaimagem> getNoticiaimagemCollection() {
return noticiaimagemCollection;
}
public void setNoticiaimagemCollection(List<Noticiaimagem> noticiaimagemCollection) {
this.noticiaimagemCollection = noticiaimagemCollection;
}
}
Entity Noticiaimagem
:
@Entity
@Table(name = "NOTICIAIMAGEM")
public class Noticiaimagem implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@ManyToOne
@JoinColumn(name = "cdNoticia", nullable = false)
@MapsId
private Noticia noticia;
@Column
private String nmImagem;
@Column(nullable = false)
private String nmExtensao;
@Column
private Float nrTamanho;
@Column(columnDefinition = "UNSIGNED SMALLINT(5)")
private Integer nrAltura;
@Column(columnDefinition = "UNSIGNED SMALLINT(5)")
private Integer nrLargura;
@Column(columnDefinition = "UNSIGNED TINYINT(3)")
private Integer nrOrdem;
@Column(columnDefinition = "UNSIGNED MEDIUMINT(8)")
private Integer cdTipoNoticiaImagem;
public Noticiaimagem() {
}
public Noticia getNoticia() {
return noticia;
}
public void setNoticia(Noticia noticia) {
this.noticia = noticia;
}
public String getNmImagem() {
return nmImagem;
}
public void setNmImagem(String nmImagem) {
this.nmImagem = nmImagem;
}
public String getNmExtensao() {
return nmExtensao;
}
public void setNmExtensao(String nmExtensao) {
this.nmExtensao = nmExtensao;
}
public Float getNrTamanho() {
return nrTamanho;
}
public void setNrTamanho(Float nrTamanho) {
this.nrTamanho = nrTamanho;
}
public Integer getNrAltura() {
return nrAltura;
}
public void setNrAltura(Integer nrAltura) {
this.nrAltura = nrAltura;
}
public Integer getNrLargura() {
return nrLargura;
}
public void setNrLargura(Integer nrLargura) {
this.nrLargura = nrLargura;
}
public Integer getNrOrdem() {
return nrOrdem;
}
public void setNrOrdem(Integer nrOrdem) {
this.nrOrdem = nrOrdem;
}
public Integer getCdTipoNoticiaImagem() {
return cdTipoNoticiaImagem;
}
public void setCdTipoNoticiaImagem(Integer cdTipoNoticiaImagem) {
this.cdTipoNoticiaImagem = cdTipoNoticiaImagem;
}
}
The database is legacy and I can’t change its structure. The table NOTICIAIMAGEM
has more than 6 million records in production. The same table does not have Primary Key and neither Foreing Key. The above code was automatically generated by the Netbeans Entity Generator.
The field
nmImagem
ofNoticiaimagem
is what? If you give aSELECT x.c FROM (SELECT COUNT(*) as c FROM noticiaimagem ni GROUP BY ni.cd_noticia, ni.nm_imagem) x WHERE x.c > 1
, it returns some result?– Victor Stafusa
@Victorstafusa, is the image path; returns.
– LucaoA