这一定是天真的,但我怀疑何时使用@Entity和@Embeddable.
说我有一个User和一个Notification班级.
@Entity
public class User{
//other properties
@onetomany
private List<Notification> notifications;
}
@Entity
public class Notification{
//properties
}
Run Code Online (Sandbox Code Playgroud)
据我所知,将有类表User和Notification,以及映射第三个表.如果我这样做怎么办?
@Entity
public class User {
//other properties
@ElementCollection
private List<Notification> notifications;
}
@Embeddable
public class Notification{
//properties
}
Run Code Online (Sandbox Code Playgroud)
我知道这不会创建一个表Notification.但我仍然可以存储我的通知对象.我浏览了文档,但有些疑惑:
笔记
对于读这个问题的人来说,这个问题也可能对你有帮助.
我在Team和Player类之间有单向@OneToMany关系.我想在你的玩家中保存一个Team对象.玩家的标识符由Team外键和列表索引构成,如下所示.我有一个像这样的映射,因为我需要保存团队和你的玩家同时吃.
@Entity
public class Team {
@Id
@GeneratedValue
private Integer id;
@CollectionOfElements
@JoinTable(
name="PLAYER",
joinColumns=@JoinColumn(name="TEAM_ID"))
@IndexColumn(name="PLAYER_INDEX")
private List<Player> playerList = new ArrayList<Player>();
}
@Embeddable
public class Player {
// Player's getter's and setter's
}
Run Code Online (Sandbox Code Playgroud)
所以如果我使用以下内容
Team team = new Team();
team.getPlayerList().add(new Player());
team.getPlayerList().add(new Player());
session.save(team); // It works!
Run Code Online (Sandbox Code Playgroud)
无论你使用@CollectionsOfElements,Player类需要@Embeddable注释,而不是@Entity,都会发生这种情况.JPA不允许@Entity和@Embeddable同时使用.玩家也是@Entity--它与其他实体有关系.
有人知道我可以通过在Player类中使用CascadeType.PERSIST与@Entity而不是@Embeddable来保存团队和玩家(单向关系)吗?
请记住,在保存之前需要分配COMPOUND主键,但Team的标识符和PlayerList索引位置可以扮演Player的复合主键的角色
问候,
在确定常见的UML类关系时,我想确认自己是否走在正确的轨道上.例如,之间的关系是:
1 stackoverflow成员和他/她的stackoverflow用户帐户分类为组合关系或聚合关系?起初我认为这是一个协会,因为这个成员"有一个"帐户.然而,在第二个想法,我正在考虑它的组成,因为每个"部分"(用户帐户)一次只属于一个整体(用户),这意味着只要我登录到stackoverflow,我必须使用这一个而且只有帐户,直到我注销.如果我使用不同的帐户重新登录到stackoverflow,那么它的组成将再次出现.你同意吗?
2一个数据库和一个人的用户帐号有聚合关系吗?我想是这样的,因为1个数据库(整个)可以存储0 ...*用户帐户(部分)的数量,但另一个数据库可以存储相同的用户帐户.
最后,任何人都可以推荐一个专门使用UML设计代码的网站吗?提前致谢