Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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/0/jpa/2.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
Spring 关联表的JPA和数据库设置_Spring_Jpa_Spring Data Jpa - Fatal编程技术网

Spring 关联表的JPA和数据库设置

Spring 关联表的JPA和数据库设置,spring,jpa,spring-data-jpa,Spring,Jpa,Spring Data Jpa,对于如何在jpa中设置数据库和实体,我有点不知所措 我有一个Attachments表,其中保存了上传的附件详细信息,如原始名称uid保存方式、保存日期等 其他几个表可以有附件,每个记录可以有多个附件 所以对于每个可以有附件的表,我会有一个id和附件id的关联表 Attachments ----------- ID Original Name Saved Name User ----------- Id Name Dog ----------- Id Breed Name Dog_Att

对于如何在jpa中设置数据库和实体,我有点不知所措

我有一个
Attachments
表,其中保存了上传的附件详细信息,如原始名称uid保存方式、保存日期等

其他几个表可以有
附件
,每个记录可以有多个附件

所以对于每个可以有附件的表,我会有一个id和附件id的关联表

Attachments
-----------
ID 
Original Name
Saved Name


User
-----------
Id
Name

Dog
-----------
Id
Breed
Name

Dog_Attachments
----------------
dog_id
attachment_id

User_Attachments
----------------
user_id 
attachment_id 
所以我认为这是设置数据库的正确方法。。。 但是我如何设置我的JPA实体呢

@Entity
@Table(name = "User")
public class UserEntity  {
     @Id
     private Long id; 
     @Column(name = "Name")
     private String name; 

     ...
     List<Attachment> attachments; 
     ...
}


@Entity
@Table(name = "user_attachment")
public class UserAttachment {
    @Id
    @Column(name = "user_id");
    private Long userId;
    @Id 
    @Column(name = "attachment_id")
    private Long attachmentId
    ....
}
@Entity
@Table(name = "attachment")
public class Attachment {

    @Column(name = "id");
    private Long id;

    @Column(name = "original_name")
    private Long originalName
    ....
}
@实体
@表(name=“User”)
公共类用户实体{
@身份证
私人长id;
@列(name=“name”)
私有字符串名称;
...
列出附件;
...
}
@实体
@表(name=“user\u附件”)
公共类用户附件{
@身份证
@列(name=“user_id”);
私有长用户ID;
@身份证
@列(名称=“附件id”)
私人长附件
....
}
@实体
@表(name=“附件”)
公共类附件{
@列(name=“id”);
私人长id;
@列(名称=“原始名称”)
私有长源名称
....
}

可能吗?或者我必须将user上的列表更改为user_附件列表,然后user_附件添加加入吗?基本上,JPA可以“展平”我的对象,或者我必须

您可能希望在模型中使用关系。SpringDataJPA负责创建连接表。如果您继续指定联接表实体,那么我担心您将无法在许多地方利用Spring数据的强大功能

因此,您需要创建以下关系:

  • 用户-附件->一对多(假设一个用户有多个附件,但附件只有一个用户)
  • 狗-附件->一对多(如上所述)
  • 为此,您只需创建以下模型:用户、狗、附件。你可能会发现理解这一点很有用

    工作(样本)示例:

    /@实体和其他注释
    公共类附件{
    @身份证
    @生成值
    私人长id;
    @列(nullable=false)
    私有字符串url;
    //在此处添加所有其他字段,如savedName、dates等
    @许多酮
    @JoinColumn(name=“附件\u id”)
    私人用户;
    @许多酮
    @JoinColumn(name=“附件\u id”)
    私家狗;
    //标准构造函数、getter、setter
    } 
    //@实体和其他注释
    公共类用户{
    //...
    @OneToMany(mappedBy=“用户”)
    私人设置附件;
    //...
    } 
    //@实体和其他注释
    公家犬{
    //...
    @OneToMany(mappedBy=“dog”)
    私人设置附件;
    //...
    }
    

    这将为您创建一个双向关系。您可能还希望查看单向关系,其中关系的多对一将不存在。干杯

    附件能否被许多用户/狗等引用?或者该附件只有一个关联实体?
    // @Entity and other annotations
    public class Attachment {
    
        @Id
        @GeneratedValue
        private long id;
     
        @Column(nullable=false)
        private String url;
    
        // add all other fields here, like savedName, dates, whatever
     
        @ManyToOne
        @JoinColumn(name="attachment_id")
        private User user;
        @ManyToOne
        @JoinColumn(name="attachment_id")
        private Dog dog;
     
        // standard constructor, getter, setter
    } 
    // @Entity and other annotations
    public class User {
    
        //...
    
        @OneToMany(mappedBy = "user")
        private Set<Attachment> attachments;
    
        //...
    
    } 
    // @Entity and other annotations
    public class Dog {
    
        //...
    
        @OneToMany(mappedBy = "dog")
        private Set<Attachment> attachments;
    
        //...
    
    }