У меня проблемы с получением этой работы, и мне интересно, если то, что я делаю, просто не имеет смысла?
public class Application {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private long id;
....
}
@MappedSuperclass
public abstract class Sample {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@OneToOne (cascade=CascadeType.ALL)
protected Application application;
....
}
// TestSample contains a list that is mapped not by the primary key of the Sample
public class TestSample extends Sample {
@OneToMany(mappedBy="application", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
private List<Part> parts = new ArrayList<Part>();
....
}
public class Part {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private long id = 0;
@ManyToOne (cascade=CascadeType.ALL, fetch=FetchType.LAZY)
Application application;
}
У меня проблема в том, что я могу добавлять детали, база данных выглядитправильно, тогда, когда я пытаюсь получить список parts
, я получаю пустой список.
Я могу заставить его работать, если скомпрометирую структуру базы данных, изменив эти классы:
// TestSample contains a list that is mapped not by the primary key of the Sample
public class TestSample extends Sample {
@OneToMany(mappedBy="testSample", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
private List<Part> parts = new ArrayList<Part>();
....
}
public class Part {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private long id = 0;
@ManyToOne (cascade=CascadeType.ALL, fetch=FetchType.LAZY)
TestSample testSample;
}
Таблицы автоматически генерируются hibernate, поэтому они выглядят так:
application
id : number
....
test_sample
id : number
application_id : number
...
part
id : number
application_id : number
Если я изменю его на менее желательный способ работы, последняя таблица будет другой:
part
id : number
test_sample_id : number
Поскольку идентификаторы во всех случаях генерируются автоматически, общих первичных ключей не существует.По сути, я пытаюсь использовать mappedby, где mappedby ссылается на поле, которое не является первичным ключом таблицы / класса с именем «TestSample».Это то, что я не уверен, имеет ли смысл в JPA.