Java Hibernate many-to-many not fully updating

hibernate many-to-many without join table
hibernate many-to-many delete problem
spring data jpa many to many query
manytomany (cascade)
thoughts on java manytomany
cascade in hibernate
update many-to-many relationship jpa
jpa many-to-many not loading

I am still fairly new to Hibernate and I am still on a steep learning curve. I have an application that will track which people were on which event and visa-versa. I have an Event Class and a Person Class linked via a jointable.

I have forms and helper classes that allow me to enter the data on the separate Person and Event classes, persist it, search it, delete it, change it and list it. This is all tested and working.

When I add people to the event I can list all the events and see the list of people attached to the events but when I output the list of People they all have an Event list of size 0.

It is my understanding that if I attach a person to an event that the person should show up in Event.myPeople and that the event should show up in Person.eventList.

Clearly I am doing something wrong and I suspect that it is in my annotations and Declarations. I have listed both set for Event and Person classes below. Failing that I have a fundamental misunderstanding of Hibernate ,both are likely. On the bright side, the more mistakes I make the faster I learn.

Any idea where I am going wrong?

@Entity
@Table(name = "PERSON")    
public class Person implements Serializable {

    @Id
    @GeneratedValue
    @Column(name = "person_id")
    private int ID;
    private String foreName;
    private String surName;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dob;       //used to differentiate people with same name
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date joinDate;  //used to filter events outside active dates
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date endDate;   //used to filter events outside active dates
    private Boolean active;
    @ManyToMany()//cascade=CascadeType.ALL)
    @JoinTable(name = "PERSON_EVENT", joinColumns = @JoinColumn(name = "person_id"),
            inverseJoinColumns = @JoinColumn(name = "event_id"))
    private Set<Event> eventList;
    @OneToOne
    private Sections mySection;


@Entity
@Table(name = "EVENT")
public class Event implements Serializable {

    @Id
    @GenericGenerator(name = "generator", strategy = "increment")
    @GeneratedValue(generator = "generator")
    @Column(name="event_id")
    private long id;
    private String eventTitle;
    private String eventDescription;
    private String eventLocation;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date startDate;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date endDate;
    @ManyToMany(cascade = CascadeType.ALL)
    private Set<Person> myPeople;
    @OneToMany(mappedBy = "myEvent")
    private Set<EventType> type;

The problem must be due to a missing mappedBy field in the many to many associations.

The field that owns the relationship is required unless the relationship is unidirectional.

I think adding (mappedBy = eventList) will suffice.

JPA many-to-many update efficiency, When updating many-to-many relationships, the SQL executed by JPA may be quite Post.java @Entity public class Post { @Id private Integer id; @​ManyToMany(cascade = {CascadeType. This works, but I have no idea why. Maybe it's because of some Hibernate bugs about orphanRemoval (#6709). In this quick tutorial, we'll have a quick look at how the @ManyToMany annotation can be used for specifying this type of relationships in Hibernate. Let's start with a simple Entity Relationship Diagram – which shows the many-to-many association between two entities employee and project: In this scenario, any given employee can be assigned


There is a common misconception about bidirectional relations in Hibernate. Hibernate does not care about consistency in your object tree. If there is a bidirectional relation between events and persons, you have to add the person to the event and the event to the person yourself. Hibernate only persists what you created in memory. Do not expect Hibernate to add any object to any collections, this is the responsibility of the business logic, which shouldn't rely on Hibernate to work properly.

Now, bidirectional relations are special in that inconsistent states in memory cannot even be persisted. With consistent data, Hibernate only has to persist one site of the bidirectional relation, because the other is (or should be) redundant. This is done by marking one part as the "inverse" part. (I'm sorry that I don't know annotation mapping syntax well enough to point to a possible error in you mapping.) "inverse" means to Hibernate nothing more then "ignore when syncing to database", because it is expected to be redundant.

You still have to make sure that the information in both collections are redundant. It actually "works" when you only add the items to the non-inverse collections. But, however, this is not recommended to do because the objects will not be consistent until saved and loaded into a new session.

Also make sure that the bidirectional relation is mapped to the same table using the same foreign keys. I don't know if annotation mapping does detect this automatically.

Hope that helps.

The best way to use the @ManyToMany annotation with JPA and , Examples · Release Notes · Issue Tracker · Trial Version · Full Version As simple as JPA annotations might be, it's not always obvious how efficient they are is the best way to use the JPA @ManyToMany annotation when using Hibernate. The first choice for many Java developers is to use a java.util. Bidirectional one-to-many and both many-to-one association mappings are fine. But you should avoid unidirectional one-to-many associations in your domain model. Otherwise, Hibernate might create unexpected tables and execute more SQL statements than you expected. Let’s take a closer look at the standard mapping.


You can try to use: @ManyToMany(fetch = FetchType.LAZY)

hibernate many-to-many updating table, Mapped usermenu in user class with many to many as shown below. table when user objects are created and updated.solution reqd . Code: import java.io.​Serializable; import java.util. @ManyToMany(fetch = FetchType. Hibernate many to many mapping is made between two entities where one can have relation with multiple other entity instances. For example, for a subscription service SubscriptionEntity and ReaderEntity can be two type of entities. Any subscription can have multiple readers,


Best Practices for Many-To-One and One-To , It's quite easy to do that with JPA and Hibernate. Why does Hibernate execute so many queries and introduce an additional association table? But it still has to perform an additional SQL UPDATE statement to set the foreign key Using it for one-to-many or many-to-one associations is not as dangerous as it is for  Hibernate Unidirectional One-to-Many mapping using @OneToMany annotation. In our database we create many tables and many of them may be associated with each other. At higher lever, these associations can be classified into one-to-one, one-to-many and many-to-many.


Best Practices for Many-to-Many Associations with Hibernate and JPA, I will not dive into the details of a basic many-to-many mapping. If you are not DON'T DO THIS!!! @ManyToMany [org.hibernate.SQL] - update Book set title=?​, version=? where id=? and version=? Java 8 Support in Hibernate 5; Native Queries with Hibernate. JOIN NOW And that's not entirely wrong. But please  A Many-to-Many mapping can be implemented using a Set java collection that does not contain any duplicate element. We already have seen how to map Set collection in hibernate, so if you already learned Set mapping, then you are all set to go with manyto-many mapping. A Set is mapped with a <set


Many-To-One Association with Hibernate, Map a many-to-one entity association in Hibernate using the @ManyToOne ContinentFromCountry.java we update both sides of the relationship in our convenience method, Hibernate It is considered good practice to prefix Hibernate annotations with the full There is no need to save the Country object explicitly. hibernate works only with persistent entities and persistent entities are classes which are attached to any hibernate session. Please note that creating an instance of a class, you mapped with a hibernate annotations, does not automatically persist the object to the database. It must be save explicitly after attaching it to a valid hibernate session.