package org.sculptor.examples.library.media.repositoryimpl; import java.util.ArrayList; import java.util.List; import org.sculptor.examples.library.media.domain.Media; import org.sculptor.examples.library.media.domain.PhysicalMedia; import org.springframework.stereotype.Repository; /** * Repository implementation for PhysicalMedia */ @Repository("physicalMediaRepository") public class PhysicalMediaRepositoryImpl extends PhysicalMediaRepositoryBase { public PhysicalMediaRepositoryImpl() { } @Override public PhysicalMedia save(PhysicalMedia entity) { // bidirectional association is complicated, because one end must be // saved first. // We could maybe simplify it to allow assignment of id before object is // saved (it is possible with mongoDB). if (entity.getId() == null && entity.isMediaLoaded()) { List<Media> media = new ArrayList<Media>(entity.getMedia()); entity.removeAllMedia(); PhysicalMedia saved = super.save(entity); for (Media each : media) { saved.addMedia(each); getMediaRepository().save(each); } return super.save(entity); } else { if (entity.isMediaLoaded()) { for (Media each : entity.getMedia()) { getMediaRepository().save(each); } } return super.save(entity); } } }