【问题标题】:Jpa mapping of composite key复合键的jpa映射
【发布时间】:2017-04-27 08:37:02
【问题描述】:

您好,下面是我的表格及其说明。

Employee:
emp_Id primary_key
emp_Name 
emp_Address

Address:
emp_id -- foreign key of employee table
addres_type
type_id

AddressType:
Type_id  -- foreign key of Address table
Type
Desc

如何创建具有这种关系的 JPA 实体。

提前致谢

【问题讨论】:

  • 在 POJO 中,您将在地址类中有一个员工而不是 emp_id,对于地址类型也是如此。但我认为这需要外键是加入表​​的 pk,就像员工和地址一样
  • 您使用哪个 IDE?大多数 IDE 都提供了从数据库表生成实体类的功能,您的表关系应该在数据库级别定义,并且应该准确,以便看到所需的结果或输出。
  • 您的表格毫无意义。我会先解决这个问题。

标签: java database jpa entity-relationship openjpa


【解决方案1】:

你最好使用AbstractPersistable来生成id:

所以 Address 和 AddressType 也会有一个 primary_key

1-员工

 @Entity
    @Table(name = "Employee ")
    public class Employee extends AbstractPersistable<Long>{

// Employee here have a generated id from AbstractPersistable

        private static final long serialVersionUID = 1L;

        @Column(name = "emp_Name ")
        private String emp_Name ;


        @ManyToOne(optional = true)
        @JoinColumn(name = "emp_Address")
        private Address emp_Address;
    }

2-地址

 @Entity
    @Table(name = "Address")
    public class Address extends AbstractPersistable<Long>{

    //Address here have a generated id from AbstractPersistable

        private static final long serialVersionUID = 1L;

//you can delete this column because you have already the ManyToOne in Employee 
        @ManyToOne(optional = true)
        @JoinColumn(name = "emp_id")
        private Employee emp_id;
//*****************

        @Column(name = "addres_type")
        private String addres_type;


        @ManyToOne(optional = true)
        @JoinColumn(name = "Type_id")
        private AddressType Type_id  ;
    }

3-地址类型

  @Entity
        @Table(name = "AddressType")
        public class AddressType extends AbstractPersistable<Long>{

       //AddressType here have a generated id from AbstractPersistable

            private static final long serialVersionUID = 1L;



            @Column(name = "Type")
            private String Type;

            @Column(name = "Desc")
            private String Desc;
        }

【讨论】:

  • 他在哪里说过使用 Spring Data?
  • 是的,他没有,这只是一个提议
  • @vinod ,Employee 表中有 id 从 AbstractPersistable 扩展
猜你喜欢
  • 2017-02-21
  • 2019-04-22
  • 2011-03-20
  • 1970-01-01
  • 2011-06-15
  • 2021-09-19
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
相关资源
最近更新 更多