Saudações!
Bem, estou começando no mundo da persistência com Hibernate e, naturalmente, estão pintando muitas dúvidas. Segui o passo a passo do “Hibernate in Action” e não estou conseguindo implementar o mapeamento com annotations ( Associação entre 2 classes ). Além disso, fiquei na dúvida se a classe Phone torna-se campo na tabela referente à classe Contact ou se ela deve ser outra classe. Fiz, considerando a última opção. Está correto? Seguem as minhas classes e o erro:
import java.util.*;
import javax.persistence.*;
import org.hibernate.annotations.Columns;
import org.hibernate.annotations.Type;
@Entity
public class Contact {
@Id
@GeneratedValue
private Long id;
private String firstName;
private String middleName;
private String lastName;
private Collection<Phone> phoneNumbers = new ArrayList<Phone>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getMiddleName() {
return middleName;
}
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@OneToMany
@JoinColumn(name="id_phone")
public Collection<Phone> getPhoneNumbers() {
return phoneNumbers;
}
public void setPhoneNumbers(Collection<Phone> phoneNumbers) {
this.phoneNumbers = phoneNumbers;
}
}
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
public class Phone implements java.io.Serializable {
private int id;
private boolean isCelPhone;
private String number;
public Phone(){
}
@Id
@GeneratedValue
@Column(name="id_phone")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public boolean isCelPhone() {
return isCelPhone;
}
public void setCelPhone(boolean isCelPhone) {
this.isCelPhone = isCelPhone;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
ERRO:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.hibernate.MappingException: Could not determine type for: java.util.Collection, at table: Contact, for columns: [org.hibernate.mapping.Column(phoneNumbers)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:292)
at org.hibernate.mapping.Column.getSqlTypeCode(Column.java:161)
at org.hibernate.mapping.Column.getSqlType(Column.java:205)
at org.hibernate.mapping.Table.sqlCreateString(Table.java:420)
at org.hibernate.cfg.Configuration.generateSchemaCreationScript(Configuration.java:881)
at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:129)
at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:91)
at Test.main(Test.java:24)
Alguém sabe o que pode ser?
Obrigado,
Bruno Giminiani.