Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » EclipseLink » Many to many with extra data in join table(Dev)
Many to many with extra data in join table [message #1457492] Fri, 31 October 2014 11:34
Toni T is currently offline Toni TFriend
Messages: 2
Registered: October 2014
Junior Member
Hi,
I'm having troubles with eclipselink JPA2 implementation.

I have this pattern:

Street
HouseNumber
PartOfStreet (M:M street:houseNumber with extra info)


@Entity
@EntityListeners(StreetValidatorListener.class)
@Table(name = "STREET")
@DiscriminatorValue(value = "STREET")
public class StreetImpl extends AreaImpl implements Street {

	@OneToMany(mappedBy = "street", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	Set<PartOfStreetImpl> houseNumbers = new HashSet<>();
...
}

@Entity
@Table(name = "HOUSE_NUMBER")
@DiscriminatorValue(value = "HOUSENUMBER")
public class HouseNumberImpl extends AreaImpl implements HouseNumber {

	@OneToMany( mappedBy = "houseNumber", fetch=FetchType.LAZY, cascade=CascadeType.ALL)
	private Set<PartOfStreetImpl> streets = new HashSet<>();

...
}

@Entity
@Table(name = "PART_OF_STREET", uniqueConstraints =  { @UniqueConstraint(columnNames = { "STREET_ID, HOUSE_NUMBER_ID" }) })
public class PartOfStreetImpl extends AbstractEntity implements PartOfStreet {
	@Id
	@SequenceGenerator(name = SEQUENCE_STYX_HOUSE_NUMBER_STREET_LINK_GENERATOR, sequenceName = "SEQ_PART_OF_STREET", allocationSize = 1, initialValue = 1)
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = SEQUENCE_STYX_HOUSE_NUMBER_STREET_LINK_GENERATOR)
	private Long id;

	@ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
	@JoinColumn(name = "STREET_ID")
	private StreetImpl street;

	@ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
	@JoinColumn(name = "HOUSE_NUMBER_ID")
	private HouseNumberImpl houseNumber;
...
}


My problem is that when I want to create a relationship entity in between street and houseNumber, I have to persist street, houseNumber and then add partOfStreet and again persist houseNumber.

         @Test
	@Rollback(true)
	public void testHouseNumberBelongsToAStreet() {
		Street street = createAndSaveStreet();
		//FIXME: If houseNumber is not saved first, it tries to persist
		// partOfStreet without flushing the session so it can't find the parent id for 
		// housenumber
		houseNumber = houseNumberFacade.saveHouseNumber(houseNumber);
		
		PartOfStreet poStreet = houseNumberFacade.newPartOfStreet();
		poStreet.setStreet(street);
		poStreet.setHouseNumber(houseNumber);
		
		street.addPartOfStreet(poStreet);
		houseNumber.addPartOfStreet(poStreet);
		
//		houseNumberFacade.savePartOfStreet(poStreet);
		houseNumberFacade.saveHouseNumber(houseNumber);
		
		Long streetPartId = street.getPartOfStreets().iterator().next().getObjectId();
		Long housenumberPartId = houseNumber.getPartOfStreets().iterator().next().getObjectId();
		assertEquals(streetPartId, housenumberPartId);
		assertEquals(street.getPartOfStreets().iterator().next(), houseNumber.getPartOfStreets().iterator().next());
	}



Please, could you give some advice of what I'm doing wrong?
Why adding the partOfStreet to houseNumber and persisting it does not cascade the changes in a right way?


Thank you guys in advance.
Previous Topic:No [ManagedType] was found for the key class.. JPA, H2, EclipseLink, Java Config (no xml)
Next Topic:Many to many with extra data in join table
Goto Forum:
  


Current Time: Tue Mar 19 02:39:51 GMT 2024

Powered by FUDForum. Page generated in 0.02357 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top