说实话,我对别名有点困惑,所以我希望有人可以帮助我更好地理解它们.为了解释我所缺少的内容,我将使用示例.
让我们说我有:
Criteria criteria = session.createCriteria(Car.class)
criteria.createAlias("doors", "doors");
Run Code Online (Sandbox Code Playgroud)
这意味着现在我可以使用一些Restrcitions来找到Car沿着这些线的左侧或其他东西的门.
现在我的问题是,如果我在哪里添加多个别名:
criteria.createAlias("doors", "doors").createAlias("doors.keytype", "keytype");
Run Code Online (Sandbox Code Playgroud)
和
criteria.createAlias("tier".tier);
Run Code Online (Sandbox Code Playgroud)
这是什么意思?我的criteria对象有所有这些别名?在哪种情况下,getAlias()方法会返回什么?
来自API:
获取此条件实例封装的实体的别名.
我的印象是所有的别名都被这个实例封装了?我错了吗?我不知何故失去了我的第一个别名?
如果我做的事情如下:
Criteria criteri2 = criteria.createAlias("tier".tier);
Run Code Online (Sandbox Code Playgroud)
这是否意味着两者criteria和criteria2点都相同Criteria或差异,哪一个指向别名?
如果每个都createAlias返回一个Criteria应该我分配给原始criteria或新的?
好吧,我希望你能看到我的困惑.
所以我有一个Users表,Projects表和User_Roles表.我有一个用户连接到2个项目,但是当我只有一个角色时,它会返回这2个项目,但如果我有2个角色,则返回4个角色(2x2个项目).我如何防止这种情况发生
这是我返回用户项目列表的代码
@Override
public List<Project> retrieve(User user) {
Criteria criteria = super.createCriteria();
criteria.addOrder(Order.desc("date"));
criteria.createCriteria("users").add(Restrictions.eq("id", user.getId()));
return (List<Project>) criteria.list();
}
Run Code Online (Sandbox Code Playgroud)
用户类中的映射
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "Users_Projects",
joinColumns = @JoinColumn(name = "UserID"), inverseJoinColumns = @JoinColumn(name = "ProjectID"))
public List<Project> getProjects() {
return projects;
}
@ElementCollection(fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)
@Column(name = "RoleType")
@JoinTable(name = "User_Roles", joinColumns = @JoinColumn(name = "UserID"))
public Set<Role> getRoles() {
return roles;
}
Run Code Online (Sandbox Code Playgroud)
有什么建议在这里有什么问题吗?
TNX
我正在努力使用 Hibernate Criteria API。
在课堂上Conversation我有:
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinTable(name = "Conversation_ConversationParticipants",
joinColumns = @JoinColumn(name = "ConversationID"),
inverseJoinColumns = @JoinColumn(name = "ConversationParticipantID"))
private List<ConversationParticipant> participants;
Run Code Online (Sandbox Code Playgroud)
在课堂上ConversationParticipant我有:
@OneToOne
@JoinColumn(name = "ParticipantID")
private User participant;
@Type(type = "true_false")
@Column(name = "Viewed")
private boolean viewed;
Run Code Online (Sandbox Code Playgroud)
在我的标准中,我有
Criteria criteria = super.createCriteria();
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
criteria.createAlias("participants", "participants");
criteria.createAlias("participants.participant", "participant");
criteria.add(Restrictions.eq("participant.id", user.getId()));
return (List<Conversation>) criteria.list();
Run Code Online (Sandbox Code Playgroud)
这一切正常,我可以看到给定用户的所有对话。但是,我想要的是查看用户尚未查看的所有对话。为此,我尝试添加:
criteria.add(Restrictions.eq("participants.viewed", false));
Run Code Online (Sandbox Code Playgroud)
但是,这会返回 0 个对话(如果我输入“true”,我会得到相同的结果,并且我已经检查了 db 并确保存在 true 和 false 的值)。我怎样才能做到这一点?我究竟做错了什么?
运行的查询是:
from
Conversations this_
inner …Run Code Online (Sandbox Code Playgroud) 是否有可能手动将插件从一个版本复制到另一个版本?基本上我想将Netbeans 7.3 beta 2中的插件复制到Netbeans 7.3(最终版本).
有问题的插件是JIRA.
Alos如果有人知道如何安装它(我可以手动下载以前版本的插件)
我尝试过很少的东西但是没有用过.
criteria ×3
hibernate ×3
alias ×2
annotations ×1
duplicates ×1
mapping ×1
netbeans ×1
netbeans-7 ×1
plugins ×1
restrictions ×1