Java Hibernate映射帮助!
我对冬眠很陌生,所以我不完全确定我想做的事情是否可能(或者是正确的事情),所以如果不可能,请随意建议其他方法来实现我想要的 我有两个实体,竞赛和固定装置。它们之间存在一对多的关系。我知道如何设置注释来实现这一点,但我正在努力使这种关系具有双向性。如果我的应用程序运行很长一段时间,那么属于某项比赛的固定装置的数量就会增加。我访问Fixture对象的最常见方式是通过指定特定日期(例如getfixture(today))的竞争。我想我可以通过在Competition类中创建一个映射来实现这一点,该映射将装置的日期映射到该日期的装置集合。但是我不知道如何在Hibernate中设置它 下面是一组简化的POJO和注释,它们说明了我到目前为止所做的工作:Java Hibernate映射帮助!,java,hibernate,annotations,hibernate-annotations,Java,Hibernate,Annotations,Hibernate Annotations,我对冬眠很陌生,所以我不完全确定我想做的事情是否可能(或者是正确的事情),所以如果不可能,请随意建议其他方法来实现我想要的 我有两个实体,竞赛和固定装置。它们之间存在一对多的关系。我知道如何设置注释来实现这一点,但我正在努力使这种关系具有双向性。如果我的应用程序运行很长一段时间,那么属于某项比赛的固定装置的数量就会增加。我访问Fixture对象的最常见方式是通过指定特定日期(例如getfixture(today))的竞争。我想我可以通过在Competition类中创建一个映射来实现这一点,该映射
@Entity
public class Competition {
// This is what I would like to have.
private Map<Date, Collection<Fixture>> fixtureMap;
public Collection<Fixture> getFixtures(Date day) {
return fixtureMap.get(day);
}
// This is all I know how to do.
private Collection<Fixture> fixtureList;
@OneToMany(mappedBy = "competition")
public Collection<Fixture> getFixtureList() {
return fixtureList;
}
}
@Entity
public class Fixture {
private Competition competition;
@ManyToOne
public Competition getCompetition() {
return competition;
}
}
@实体
公开课比赛{
//这是我想要的。
私有地图固定地图;
公共收集装置(日期日){
返回fixtureMap.get(天);
}
//这就是我所知道的。
私人收藏固定列表;
@OneToMany(mappedBy=“竞争”)
公共集合getFixtureList(){
返回固定列表;
}
}
@实体
公务舱固定装置{
私人竞争;
@许多酮
公开竞争{
回归竞争;
}
}
正如您可以从中看到的,我可以设置关系以访问比赛的整套装置。但是为了得到某一天的固定装置,我必须迭代整个固定装置集合并检查每个装置的日期。有没有办法让Hibernate处理从日期到装置集合的映射?如果我能做到这一点,那么我就可以简单地使用日期作为地图中的键访问当天的固定装置集合。没有直接的注释可以帮助。您必须编写一个查询来获取特定日期的装置。我相信您可以使用Hibernate实体映射。以下线程将非常有用: 您还可以在
@实体上查找实体映射
公开课比赛
{
私有地图固定地图;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“competition”)
@地图键(“日期”)
公共收集装置(日期日)
{
返回fixtureMap.get(天);
}
}
@实体
公务舱固定装置
{
私人竞争;
私人日期;
@列(name=“FIXTURE\u DATE”)
公共日期getDate()
{
返回日期;
}
@许多酮
公开竞争
{
回归竞争;
}
}
在保存竞争对象之前,请记住设置双向关系。这意味着您必须在fixture中设置竞争对象,以保持fixture对象和关系
@Entity
public class Competition
{
private Map<Date, Collection<Fixture>> fixtureMap;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "competition")
@MapKey("date")
public Collection<Fixture> getFixtures(Date day)
{
return fixtureMap.get(day);
}
}
@Entity
public class Fixture
{
private Competition competition;
private Date date;
@Column(name="FIXTURE_DATE")
public Date getDate()
{
return date;
}
@ManyToOne
public Competition getCompetition()
{
return competition;
}
}