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