Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠具有相同名称的一对多JoinColumn_Java_Hibernate - Fatal编程技术网

Java 休眠具有相同名称的一对多JoinColumn

Java 休眠具有相同名称的一对多JoinColumn,java,hibernate,Java,Hibernate,我有两个表,每个表有两列,如上所述。 我想在assignment实体中创建一个审阅列表,这些审阅在assignmentCode列中加入 在任务中,我定义如下: Entity(name = "Assignment") class Assignment { @Id private int id; private String assignmentCode; } Entity(name = "Review") class Review { @Id private int id

我有两个表,每个表有两列,如上所述。 我想在assignment实体中创建一个审阅列表,这些审阅在assignmentCode列中加入

在任务中,我定义如下:

Entity(name = "Assignment")
class Assignment {
  @Id
  private int id;

  private String assignmentCode;

}

Entity(name = "Review")
class Review {
  @Id
  private int id;

  private String assignmentCode;
}
@OneToMany(targetEntity=Review.class,fetch=FetchType.EAGER)
@JoinColumn(name=“assignmentCode”)
私有列表评论=新建ArrayList();
但是当我检索到Assignment=session.findById(Assignment.class,id)时; 我得到的异常是由以下原因引起的:com.microsoft.sqlserver.jdbc.SQLServerException:不明确的列名'assignmentCode'

定义评论集合的正确方法是什么? 我无法将表结构更改为具有不同的列名。

您应该:

  • 在名为“assignmentCode”的Assignment.assignmentCode之前添加列注释(@column)(对于没有此注释的其他字段)
  • 在类实体之前添加表注释
  • 将table语句添加到JoinColumn注释中
  • 最终代码:

    @OneToMany(targetEntity = Review.class, fetch=FetchType.EAGER)
    @JoinColumn(name="assignmentCode")
    private List<Review> reviews = new ArrayList<Review>();
    
    @实体
    @表(name=“分配”)
    课堂作业{
    @身份证
    私有int-id;
    @列(name=“分配\代码”)
    私有字符串赋值码;
    @OneToMany(targetEntity=Review.class,fetch=FetchType.EAGER)
    @JoinColumn(name=“assignment\u code”,table=“review”)
    私有列表评论=新建ArrayList();
    }
    @实体
    @表(name=“review”)
    课堂复习{
    @身份证
    私有int-id;
    @列(name=“分配\代码”)
    私有字符串赋值码;
    }
    
    看到您的错误消息,我相信这是因为您的列名称与Java变量名称不同,通常我会在数据库中将我的列命名为类似于
    assignment\u code
    的名称,而此列是用于连接审阅和赋值的引用

    我的第一个建议是,如果我对数据库列和Java变量之间不同命名的直觉正确,请将
    @column(name=“assignment\u code”)
    置于
    私有字符串assignmentCode
    之上

    其次,我认为您在定义
    @OneToMany
    关系时犯了错误。我将在
    作业
    类中做类似的事情(我假设您希望从代码中看到单向的东西)

    @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,orphanRemoving=true)
    @JoinColumn(name=“分配\代码”)
    私有列表评论=新建ArrayList();
    

    提醒,在
    @JoinColumn
    上,名称是数据库上的引用列的名称,而不是Java变量名

    正确的解决方案是()

    @实体(name=“分配”)
    课堂作业{
    @身份证
    私有int-id;
    私有字符串赋值码;
    @OneToMany(mappedBy=“转让”)
    私有列表评论=新建ArrayList();
    公开审查(审查){
    评论。添加(评论);
    评论。setPost(本);
    }
    公共作废清除审查(审查){
    审查。删除(审查);
    reviews.setAssignment(null);
    }
    }
    @实体(名称=“审查”)
    课堂复习{
    @身份证
    私有int-id;
    @manytone(fetch=FetchType.LAZY)
    @连接柱(
    name=“assignmentCode”,
    referencedColumnName=“assignmentCode”
    )
    私人转让;
    }
    
    如果您定义@JoinColumn(name=“assignmentCode”,table=“your\u Review\u tableName\u here”),我正在处理现有数据库,因此无法更改列名,该怎么办。因此,我使用@Column(name=“assignmentCode”)并进行了这些更改。但是我得到了由以下原因引起的异常:org.hibernate.cfg.NotYetImplementedException:Collections在secondary table中有FK那么我需要查看您现有的数据库方案来帮助您。或者您可以根据您的方案自行更改批注中的名称(JoinColumn、Column、Table)。分配表:Columns:ID,AssignmentCode---Review表:Columns:ID,AssignmentCode尝试将审查字段替换为:@OneToMany(targetEntity=Review.class,fetch=FetchType.EAGER,mappedBy=“AssignmentCode”)私有列表评论=新建ArrayList();不。。。这再次给出了错误的模棱两可的列名'assignmentCode'Mine是一个现有的数据库。所以我不能更改列名
    @Entity
    @Table(name = "assignment")
    class Assignment {
      @Id
      private int id;
    
      @Column(name="assignment_code")
      private String assignmentCode;
    
      @OneToMany(targetEntity = Review.class, fetch=FetchType.EAGER)
      @JoinColumn(name="assignment_code", table="review")
      private List<Review> reviews = new ArrayList<Review>();
    }
    
    @Entity
    @Table(name = "review")
    class Review {
      @Id
      private int id;
    
      @Column(name="assignment_code")
      private String assignmentCode;
    }
    
    @OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY, orphanRemoval = true)
    @JoinColumn(name="assignment_code")
    private List<Review> reviews = new ArrayList<Review>();
    
    @Entity(name = "Assignment")
    class Assignment {
       @Id
       private int id;
    
       private String assignmentCode;
    
       @OneToMany(mappedBy = "assignment")
       private List<Review> reviews = new ArrayList<Review>();
    
       public void addReview(Review review) {
            reviews.add(review);
            reviews.setPost(this);
        }
    
        public void removeReview(Review review) {
            reviews.remove(review);
            reviews.setAssignment(null);
        }
    
    }
    
    @Entity(name = "Review")
    class Review {
       @Id
       private int id;
    
       @ManyToOne(fetch = FetchType.LAZY)
       @JoinColumn(
          name = "assignmentCode", 
          referencedColumnName = "assignmentCode"
       )
       private Assignment assignment;
    }