【问题标题】:Mapping a table's components as arraylist in another table as onetomany将一个表的组件映射为另一个表中的数组列表作为 onetomany
【发布时间】:2018-11-06 07:16:03
【问题描述】:

我正在将 JPA 与休眠持久性管理器一起使用。

我有两个类,LibraryLoanSystem.javaUser.java

LibraryLoanSystem.java

 @Entity
    public class LibraryLoanSystem {

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer idOfLLS;

        @Transient
        private ArrayList<Loan> loans = new ArrayList<Loan>();

        @Transient
        private ArrayList<Loanable> loanables = new ArrayList<Loanable>();

        @OneToMany
        @JoinTable(name = "USER" , joinColumns = @JoinColumn(name = "studentId"))
        private ArrayList<User> users = new ArrayList<User>();

        @Transient
        private ObservableList<Material> materialData = FXCollections.observableArrayList();

        public LibraryLoanSystem() {

            populateUsers();
            populateMaterials();
        } //getters,setters and methods

User.java

@Entity
@Table(name = "User")
public class User {

    /* Name of the User */
    @Column(name = "name", nullable = false)
    private String name;

    /* Date of Birth for the User */
    @Column(name = "dateOfBirth",nullable = false)
    private LocalDate dateOfBirth;

    /* Student ID of the User */
    @Id
    @Column(name = "studentId", updatable = false, nullable = false)
    private String studentId;
//constructor,getters & setters

基本上,libraryloansystem 中的 ArrayList users 是系统中所有用户的列表,也就是。用户表行中的所有用户记录。这两个java类之间存在聚合关系,onetomany,libraryloansystem有多个用户,但用户只有一个系统。我不确定如何映射它们,我得到了

非法尝试将非集合映射为@OneToMany、@ManyToMany 或@CollectionOfElements:controller.LibraryLoanSystem.users

根据我的尝试。如何正确映射此数组列表?谢谢

【问题讨论】:

  • (1) 为什么要为实体表 (@Table(name = "User"...) 和连接表 (@JoinTable(name = "USER"...) 赋予相同的名称? (2) 不要试图强制一个特定的列表实现。请改用private List&lt;User&gt; users = new ArrayList&lt;User&gt;()

标签: java hibernate jpa hibernate-mapping


【解决方案1】:

而不是: private ArrayList&lt;User&gt; users = new ArrayList&lt;User&gt;();

使用:private List&lt;User&gt; users = new ArrayList&lt;&gt;();

如文档所述 (link):

Hibernate 要求将持久的集合值字段声明为接口类型。实际的接口可能是 java.util.Set、java.util.Collection、java.util.List、java.util.Map、java.util.SortedSet、java.util.SortedMap 或任何你喜欢的东西(“任何你喜欢的东西”意味着您必须编写 org.hibernate.usertype.UserCollectionType 的实现。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多