I have a second business object named Receiver ..... it is a many to many relation with TextMessage
import java.util.Date;
import java.util.List;
import java.util.Vector;
import javax.persistence.*;
import org.hibernate.annotations.CollectionId;
@Entity
@Table(name="TEXT_MESSAGE")
public class TextMessage {
private Long id;
private String message;
private String senderId;
private Date sendDate;
private String apiMessageId;
private List<Receiver> receivers = new Vector<Receiver>();
public TextMessage() {}
@Column(name="MESSAGE")
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@ManyToMany
@CollectionId(
columns = @Column(name="TEXTMESSAGE_RECEIVER_ID"),
[email protected](type="long"),
generator="sequence"
)
@JoinTable(
name="TEXTMESSAGE_RECEIVER",
joinColumns={@JoinColumn(name="MESSAGE_ID")},
inverseJoinColumns={@JoinColumn(name="RECEIVER_ID")}
)
public List<Receiver> getReceivers() {
return receivers;
}
public void setReceivers(List<Receiver> receivers) {
this.receivers = receivers;
}
public void addReceiver(Receiver receiver) {
receivers.add(receiver);
}
public void removeReceiver(Receiver receiver) {
receivers.remove(receiver);
}
@Column(name="SENDER_ID")
public String getSenderId() {
return senderId;
}
public void setSenderId(String senderId) {
this.senderId = senderId;
}
@Column(name="SEND_DATE")
public Date getSendDate() {
return sendDate;
}
public void setSendDate(Date sendDate) {
this.sendDate = sendDate;
}
@Column(name="API_MESSAGE_ID")
public String getApiMessageId() {
return apiMessageId;
}
public void setApiMessageId(String apiMessageId) {
this.apiMessageId = apiMessageId;
}
@Id @GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "MESSAGE_ID")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
I found the examples in the JP with Hibernate book and online.
When I try to run the Unit test now to store the TextMessage I get the following error:
javax.persistence.PersistenceException: org.hibernate.MappingException: Could not determine type for: java.util.List, for columns: [org.hibernate.mapping.Column(textMessages)]
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:737)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:121)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
at ditp.ricoh.persistence.TextMessageDAO.storeTextMessage(TextMessageDAO.java:20)
at ditp.ricoh.service.TextMessageSO.storeTextMessage(TextMessageSO.java:71)
at UNIT_storage.storeTextMessage(UNIT_storage.java:62)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.List, for columns: [org.hibernate.mapping.Column(textMessages)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:266)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253)
at org.hibernate.mapping.Property.isValid(Property.java:185)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:440)
at org.hibernate.mapping.RootClass.validate(RootClass.java:192)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1102)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1287)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:730)
... 26 more
If I'm reading it correctly it says it can not determine the type for java.util.List with HibernateMapping. It does so for the column textMessages .... so that should be a problem in the Receiver object then.
What type should I use for these collections of entity classes so Hibernate understand what it is?