【问题标题】:Difference between name and referencedColumnName in @JoinColumn annotation?@JoinColumn 注释中的 name 和 referencedColumnName 之间的区别?
【发布时间】:2018-11-13 18:45:58
【问题描述】:
@ManyToOne
@JoinColumn(name = "someValue" , referencedColumnName = "someOtherValue" )

如果两个表通过ManyToOne 关联链接,那么namereferencedColumnName 列中应放置哪些值?

【问题讨论】:

    标签: java spring hibernate


    【解决方案1】:

    假设你有两个表:

    1. Department table with columns:
     a. Dept_ID (primary key)
     b. Dept_Name
    
    2. Employee Table with following column:
      a. Emp_Id (primary key)
      b. Dept_Id_fk (foreign key)
      c. Salary
    

    现在您的员工实体类的联接列将是

    @ManyToOne
    @JoinColumn(name = "Dept_Id_fk", referencedColumnName = "Dept_ID")
    Department department;
    

    因此,referencedColumnName 表示您从外键列中引用的列。

    【讨论】:

    • 不客气!如果这回答了您的问题,请不要忘记将其标记为答案!谢谢。
    【解决方案2】:

    oneToMany 关联的联接列是什么样的?这是一个例子:

    人员表:

    person_id (pk),person_name

    person_reltn 表:

    person_reltn_id (pk), child_person_id (fk), parent_person_id (fk)

    对于上述表格,如果我要创建 Person 实体:

     class Person(){
        
         @Id
          @Column(name = "PERSON_ID")
          private long personId;
        
          @NotFound(action = NotFoundAction.IGNORE)
          @OneToMany(fetch = FetchType.LAZY)
          @JoinColumn(
              name = "CHILD_PERSON_ID",
              referencedColumnName = "PERSON_ID",
              updatable = false,
              insertable = false)
          @Where(clause = "ACTIVE_IND = 1")
          @Filter(
              name = FilterConstants.END_EFFECTIVE_DATE_TIME_FILTER,
              condition = FilterConstants.END_EFFECTIVE_DATE_TIME_CONDITION)
          @Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
          private final List<PersonRelation> personRelations = new ArrayList<>();
    }
    

    在 joinColumn 中,名称是否应始终具有外键(这意味着您要加入的实体的值),而 referenceColumnName 应始终具有实体上的主键?如果是,这将与上述 Sayantan 的回答相反。如果我误解了这个概念,请告诉我。

    2021 年 3 月 4 日更新

    经过更多研究,我找到了有关如何根据实体映射设置 referenceColumnName 的文档[1]。看起来,对于单向 OneToMany 映射,引用的列在源实体的表中。

    1.https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/JoinColumn.html

    【讨论】:

      猜你喜欢
      • 2019-07-11
      • 2011-03-25
      • 1970-01-01
      • 2012-06-25
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      相关资源
      最近更新 更多