Question

I'm trying to migrate a MySql database to Postgresql. I am using JPA and was using Eclipse Link for the MySQL database, but I am switching to Hibernate for the Postgresql database.

The following JPA annotations work with EclipseLink:

UserBean.java:

@OneToMany(mappedBy = "sender", cascade = CascadeType.ALL)
@JoinTable(name = "MESSAGES_SENT")
private List<MessageBean> messagesSent;

@OneToMany(mappedBy = "receiver", cascade = CascadeType.ALL)
@JoinTable(name = "MESSAGES_RECEIVED")
private List<MessageBean> messagesReceived;

MessageBean.java:

@ManyToOne
private UserBean sender;

@ManyToOne
private UserBean receiver;

With Hibernate, I get the following error message:

org.hibernate.AnnotationException: Associations marked as mappedBy must not define database mappings like @JoinTable or @JoinColumn

How can I get it to work with Hibernate? It is important that the database schema does not change, because I want to dump the MySql database into the Postgresql database, without modifying any tables or column names.

Cheers,
Dominik

Was it helpful?

Solution

Mapped by means that Hibernate should look/track the other side of the relation, so try to move the joined table to the other side of the relation:

UserBean:

@OneToMany(mappedBy = "sender", cascade = CascadeType.ALL)
private List<MessageBean> messagesSent;

@OneToMany(mappedBy = "receiver", cascade = CascadeType.ALL)
private List<MessageBean> messagesReceived;

MessageBean:

@ManyToOne
@JoinTable(name = "MESSAGES_SENT")
private UserBean sender;

@ManyToOne
@JoinTable(name = "MESSAGES_RECEIVED")
private UserBean receiver;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top