Double-foreign-key w Hibernate

1

Siema, podpowiedzcie jak ogarnąć takie wiązanie, że w jednej tabeli będą się znajdowały dwa klucze z tabeli drugiej.
Chodzi o to że jest Historia przekazania sprzętu w której musi się znaleźć ID magazynu docelowego i ID magazynu źródłowego. Ponadto, sprzęt może "być przenoszony" między magazynami i przy każdym przeniesieniu powinna tworzyć się, historia z jakiego magazynu dany sprzęt został przekazany. Im więcej przekazań tym więcej wpisów w historii danego sprzętu.
Czy da się zrobić coś takiego za pomocą powiązania adnotacją? Może znacie lub spotkaliście się z innym (bardziej profesjonalnym) rozwiązaniem poniższego problemu?

poniżej przykład który nie działa - dostaje taki błąd:

Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: pl.tbns.model.TransmissionHistory column: magazine_id (should be mapped with insert="false" update="false")
@Entity
@Table(name = "Magazine")
public class Magazine {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "magazine_id", unique = true, nullable = false)
	private long id;
	
	@ManyToMany
	private List<Equipment> equipment;
	
	@OneToMany(mappedBy = "equipment")
	private Set<TransmissionHistory> transmisHistory;
	
	private String name;
 
 
@Entity
@Table(name = "TransmissionHistory")
public class TransmissionHistory{

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "transmisHistory_id", unique = true, nullable = false)
	private long id;
	
	@ManyToOne
	@JoinColumn(name = "equipment_id")
	private Equipment equipment;
	
	@ManyToOne
	@JoinColumn(name = "magazine_id")
	private Magazine sourceMagazine; //magazyn źródłowy
	
	@ManyToOne
	@JoinColumn(name = "magazine_id")
	private Magazine destMagazine;   //magazyn docelowy

1

hmm... w zasadzie temat można już zamknąć, gdyż sam sobie z nim poradziłem :) Niech będzie dla potomności...

Oto rozwiązanie:

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

	private static final long serialVersionUID = -6545040713713942954L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "transmisHist_id", unique = true, nullable = false)
	private long id;
	
	@ManyToOne
	@JoinColumn(name = "equipment_id")
	private Equipment equipment;
	
	@ManyToOne
	@JoinColumn(name = "sourceMagazine_id")
	private Magazine sourceMagazine; //magazyn źródłowy
	
	@ManyToOne
	@JoinColumn(name = "destMagazine_id")
	private Magazine destMagazine; //magazyn docelowy
@Entity
@Table(name = "Magazine")
public class Magazine implements Serializable {

	private static final long serialVersionUID = 1816879387948066857L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "magazine_id", unique = true, nullable = false)
	private long id;
	
	@ManyToMany
	private List<Equipment> equipment;
	
	@OneToMany(mappedBy = "sourceMagazine")
	private Set<TransmissionHistory> transmisHistFromSource = new HashSet<TransmissionHistory>();
	
	@OneToMany(mappedBy = "destMagazine")
	private Set<TransmissionHistory> transmisHistFormDest = new HashSet<TransmissionHistory>();
0

Brawo, udało Ci się! ;3

1 użytkowników online, w tym zalogowanych: 0, gości: 1