Java JPA hibernate部分一对多连接表

Java JPA hibernate部分一对多连接表,java,hibernate,jpa,orm,Java,Hibernate,Jpa,Orm,我有文件和电子邮件。 有些文件会附加到电子邮件中,它们只会附加一次。 我可以通过一个只有email\u id和file\u id的附件表来实现这一点 电子邮件实体: @Entity @Table(name = "email") public class Email { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @OneToMany(mappedBy = "ema

我有文件和电子邮件。 有些文件会附加到电子邮件中,它们只会附加一次。 我可以通过一个只有email\u id和file\u id的附件表来实现这一点

电子邮件实体:

@Entity
@Table(name = "email")
public class Email {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @OneToMany(mappedBy = "email")
    @JoinTable(
        name="attachments",
        joinColumns={@JoinColumn(name="email_id")},
        inverseJoinColumns={@JoinColumn(name="file_id")})
    private List<File> files;

}
问题是并非所有文件都是附件,因此我不希望
文件中的
电子邮件
实体。
有没有其他方法可以做到这一点?
我想继承可能是新的实体
附件
扩展
文件

更新:


我可能应该多解释一点:如果我有
Case
,它有一个
File
的列表,并且
Case
也有一个
Email
的列表,它也有一个
File
的列表,我会让文件出现在
Case
实体中的两个位置。如果我有一个
附件
实体,它也是一个
文件
,我会有它,这样在发送电子邮件的情况下,实体就不能从那里更新,我会使
文件
不可删除。想法?

事实上,一封电子邮件可以有多个文件,所以为什么不这样实现呢。从电子邮件到文件都有一对多的关系。这并不意味着你必须有电子邮件的文件。文件可以是0或更多。别把事情弄复杂了。我认为在这种情况下使用继承没有任何意义。关联不必是双向的。你想要的只是一个单向的、单一的协会。顺便说一句,你们的双向关联的当前映射是错误的。谢谢各位,我为这个问题补充了一点,你们能看一下吗?
@Entity
@Table(name = "file")
public class File {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @ManyToOne
    private Email email;

}