有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate JPA可连接共享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;
    }

有了这些实体,我进行了两次迭代:

  1. 我保存了一个类型列表(34个对象)。查看我的数据库表,我可以获取所有34种类型
  2. 我保存了一个电影列表(超过100万个对象)。现在,每个电影对象都有一个类型列表,这些类型将以不同的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();
    }
}

共 (0) 个答案