8

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

1

1 Answer 1

7

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; 
Sign up to request clarification or add additional context in comments.

1 Comment

This is also true for @JoinColumn. I just learned that from applying your answer.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.