gpt4 book ai didi

java - JPA:我应该如何注释这个 map 集合?

转载 作者:行者123 更新时间:2023-11-30 06:31:45 25 4
gpt4 key购买 nike

我将通过给您一个描述性示例来解释自己。假设我们正在使用 JPA 编写一个非常简单的云存储,因此我们有两个主要类,UserFile,编码如下:

class User {
List<File> ownFiles;
Map<File, Integer> sharedFiles;
}

class File {
User author;
Map<User, Integer> sharedUsers;
}

我应该如何注释此字段?我已经尝试过,但总是收到 NotSerializedException “数据对于列来说太长”

  • 顺便说一句,File只是一个例子,我真正的类很小,只由一些字符串组成。因此,我非常确定由于 Map 注释而引发了 NotSerializedException

  • 顺便说一下,这里有 Maps 值的含义,

    • 对于User,文件的整数值代表用户对该文件的权限级别
    • 对于文件,键是文件已共享到的用户,值是该用户对文件的权限级别<

P.S:我正在使用 Eclipselink

最佳答案

如评论中所述,Map<>无法由JPA 1.0以这种方式处理(因此会尝试序列化)

JPA 2.0增加了注解,问题较多,属性比较微妙(个人观点) https://wiki.eclipse.org/EclipseLink/Examples/JPA/2.0/ElementCollections我并不惊讶生成的数据库可以相似

在我看来,我可以使用 JPA 1 方式更好地控制数据库(对我来说更干净)。让我展示一下我的建议。

我对 1.x 哲学中的逻辑结构的澄清是:

class User {
// ... fields waht You want
}

class FileEtiquette {
User author;
}

class SharingIncident {
User user;
FileEtiquette file;
int level;
}

也许我不完全理解你的命名法,所以名字可能不优雅。

下一次尝试,未编译,仅作为示例。

    @Entity
class User {
@Id
int id;
@Basic
Set<SharingIncident> shares;
@Basic
Set<FileEtiquette> myFiles;
// ... fields waht You want
}

@Entity
class FileEtiquette {
@Id
int id;
@Basic
Set<SharingIncident> sharedBy;
User author;
}

@Entity
class SharingIncident {
@Id
int id;
User user;
FileEtiquette file;
int level;
}

很少评论。

  • 多对多可以以“自动”的方式实现,但是在你的示例整数字段很有趣,值得设计关系手动。
  • 通常当普通程序员认为 List<> ,在 JPA Set<>能变得更好
  • 改变你的File名字是我个人的口味
  • 这只是基础,根据我对您意图的理解,还有很多改进的可能。我的目标是展示如何以经典方式替换 Map<>

可能的后续步骤,让我想一下

关于java - JPA:我应该如何注释这个 map 集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45950496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com