0
我在將實體保存到數據庫時遇到了問題。休眠JPA joinTable共享ID
@MappedSuperclass
public abstract class BaseJpa {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
@Entity
@Table(name="genres")
public class GenreJpa extends BaseJpa{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Entity
@Table(name="movies")
public class MovieJpa extends BaseJpa{
@Type(type="text")
private String name;
private String releaseDate;
@Type(type="text")
private String summary;
@JoinTable(name = "movie_genres", joinColumns = @JoinColumn(name = "movie_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "genre_id", referencedColumnName = "id"))
@OneToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
private List<GenreJpa> genres;
private long votes;
private double rank;
public long getVotes() {
return votes;
}
public void setVotes(long votes) {
this.votes = votes;
}
public double getRank() {
return rank;
}
public void setRank(double rank) {
this.rank = rank;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getReleaseDate() {
return releaseDate;
}
public void setReleaseDate(String releaseDate) {
this.releaseDate = releaseDate;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public List<GenreJpa> getGenres() {
return genres;
}
public void setGenres(List<GenreJpa> genres) {
this.genres = genres;
}
說完這些實體,我做2次迭代:
- 我堅持流派的列表(34級的對象)。檢查我的數據庫表,我可以獲取所有34種流派。
- 我堅持一個電影列表(超過1密爾對象)。現在,每個電影對象都有一個流派列表,並且這些流派正被插入到具有不同ID的流派表格中。是不可能讓它分享已經插入的流派?爲了不再插入流派?
方法用來插入數據:
public void batchInsertMovies(List<MovieJpa> movies){
EntityManager entityManager = EMF.get().createEntityManager();
try{
entityManager.getTransaction().begin();
int i = 0;
for(MovieJpa movie : movies){
entityManager.persist(movie);
i++;
if(i == 30){
//flush a batch of inserts and release memory
entityManager.flush();
entityManager.clear();
}
}
entityManager.getTransaction().commit();
} catch (Exception e){
e.printStackTrace();
entityManager.getTransaction().rollback();
} finally {
entityManager.close();
}
}
public void batchInsertGenres(List<GenreJpa> genres){
EntityManager entityManager = EMF.get().createEntityManager();
try{
entityManager.getTransaction().begin();
int i = 0;
for(GenreJpa genre : genres){
entityManager.persist(genre);
i++;
if(i == 5){
//flush a batch of inserts and release memory
entityManager.flush();
entityManager.clear();
}
}
entityManager.getTransaction().commit();
} catch (Exception e){
e.printStackTrace();
entityManager.getTransaction().rollback();
} finally {
entityManager.close();
}
}
爲什麼你有OneToMany連接表?它不應該是ManyToMany嗎? –
你是對的,應該是ManyToMany。 Upvoting您的評論。 – CrazySabbath