Java 按日期排序的Hibernate xml映射列表
我有两把刀。第一种是使用注释映射实体,第二种是使用xml进行hibernate。我有两个实体。 News.java:Java 按日期排序的Hibernate xml映射列表,java,xml,hibernate,Java,Xml,Hibernate,我有两把刀。第一种是使用注释映射实体,第二种是使用xml进行hibernate。我有两个实体。 News.java: @Entity @Table(name = "NEWS") public class News implements Serializable{ /** * serialVersionUID */ private static final long serialVersionUID = 883279937885116359L; /**
@Entity
@Table(name = "NEWS")
public class News implements Serializable{
/**
* serialVersionUID
*/
private static final long serialVersionUID = 883279937885116359L;
/**
* News id
*/
@Id
@GeneratedValue(generator = "news_seq")
@SequenceGenerator(name="news_seq", sequenceName="NEWS_SEQ",allocationSize=1)
@Column(name = "NEWS_ID", nullable = false, unique = true)
private Long id;
/**
* News short text
*/
@Column(name = "SHORT_TEXT")
private String shortText;
/**
* News full text
*/
@Column(name = "FULL_TEXT")
private String fullText;
/**
* News title
*/
@Column(name = "TITLE")
private String title;
/**
* News creation date
*/
@Column(name = "CREATION_DATE")
private Date creationDate;
/**
* News modification date
*/
@Column(name = "MODIFICATION_DATE")
private Date modificationDate;
/**
* News author
*/
@ManyToOne(cascade = CascadeType.REMOVE, fetch = FetchType.EAGER)
@JoinTable(
name = "NEWS_AUTHOR",
joinColumns = {@JoinColumn(name = "NEWS_ID")},
inverseJoinColumns = {@JoinColumn(name = "AUTHOR_ID")}
)
private Author author;
/**
* News comments
*/
@OneToMany(cascade = CascadeType.ALL, orphanRemoval= true)
@JoinColumn(name = "NEWS_ID")
@OrderBy("creationDate DESC")
private List<Comment> comments;
和xml映射
<class name="news.entity.News" table="NEWS">
<id name="id" type="java.lang.Long">
<column name="NEWS_ID"/>
<generator class="sequence">
<param name="sequence">NEWS_SEQ</param>
</generator>
</id>
<property name="title" column="TITLE" />
<property name="shortText" column="SHORT_TEXT" />
<property name="fullText" column="FULL_TEXT" />
<property name="creationDate" type="java.util.Date" column="CREATION_DATE" />
<property name="modificationDate" type="java.util.Date" column="MODIFICATION_DATE" />
<list name="comments" access="field" cascade="all" >
<key column="news_id" not-null="true" />
<index column="comment_id" />
<one-to-many class="com.epam.news.entity.Comment" />
</list>
<join table="NEWS_AUTHOR" inverse="true">
<key column="NEWS_ID"/>
<many-to-one name="author" column="AUTHOR_ID" not-null="true"/>
</join>
</class>
<class name="news.entity.Comment" table="COMMENTS">
<id name="id" type="java.lang.Long">
<column name="COMMENT_ID"/>
<generator class="sequence">
<param name="sequence">COMMENT_SEQ</param>
</generator>
</id>
<property name="commentText" column="COMMENT_TEXT" />
<property name="creationDate" column="CREATION_DATE" />
<many-to-one name="news" fetch="select" column="news_id" cascade="all" insert="false" update="false"/>
</class>
新闻
评论如下
但是我在news.comments中有很多空元素(我知道为什么),它们是按comment\u id排序的。我可以有一个没有空元素并按comment CREATION\u DATE排序的评论列表吗?我只能使用xml。看起来您可以使用
where
和order by
映射元素,如中所述
您可以使用
where
过滤空值,并使用order by
进行排序。看起来您可以使用where
和order by
映射元素,如中所述
您可以使用
where
过滤空值,并使用orderby
进行排序。在news.comments
中使用空元素是什么意思?“这怎么会发生?”德拉甘博扎诺维奇冬眠观察。因此,如果news只有一条id=3的注释,那么news.comments将是[null,null,null,[3,“text”,Date,news]](hibernate以0开头)我不确定我是否完全理解。这是你方的某种性能优化吗?为什么索引会指向不存在的数据?尽管如此,请看我的答案,也许它会有帮助。它的Hibernate特性(如我所读)。我认为这是因为我们可以编写news.comments.get(comment_id)来查找具有此类id的评论。null只会填充空白位置。有趣的是,可能很有用。我不知道有这样一个功能。你说的新闻评论中的空元素是什么意思?“这怎么会发生?”德拉甘博扎诺维奇冬眠观察。因此,如果news只有一条id=3的注释,那么news.comments将是[null,null,null,[3,“text”,Date,news]](hibernate以0开头)我不确定我是否完全理解。这是你方的某种性能优化吗?为什么索引会指向不存在的数据?尽管如此,请看我的答案,也许它会有帮助。它的Hibernate特性(如我所读)。我认为这是因为我们可以编写news.comments.get(comment_id)来查找具有此类id的评论。null只会填充空白位置。有趣的是,可能很有用。我不知道有这样一个功能。你说的新闻评论中的空元素是什么意思?“这怎么会发生?”德拉甘博扎诺维奇冬眠观察。因此,如果news只有一条id=3的注释,那么news.comments将是[null,null,null,[3,“text”,Date,news]](hibernate以0开头)我不确定我是否完全理解。这是你方的某种性能优化吗?为什么索引会指向不存在的数据?尽管如此,请看我的答案,也许它会有帮助。它的Hibernate特性(如我所读)。我认为这是因为我们可以编写news.comments.get(comment_id)来查找具有此类id的评论。null只会填充空白位置。有趣的是,可能很有用。我不知道有这样的特征。
<class name="news.entity.News" table="NEWS">
<id name="id" type="java.lang.Long">
<column name="NEWS_ID"/>
<generator class="sequence">
<param name="sequence">NEWS_SEQ</param>
</generator>
</id>
<property name="title" column="TITLE" />
<property name="shortText" column="SHORT_TEXT" />
<property name="fullText" column="FULL_TEXT" />
<property name="creationDate" type="java.util.Date" column="CREATION_DATE" />
<property name="modificationDate" type="java.util.Date" column="MODIFICATION_DATE" />
<list name="comments" access="field" cascade="all" >
<key column="news_id" not-null="true" />
<index column="comment_id" />
<one-to-many class="com.epam.news.entity.Comment" />
</list>
<join table="NEWS_AUTHOR" inverse="true">
<key column="NEWS_ID"/>
<many-to-one name="author" column="AUTHOR_ID" not-null="true"/>
</join>
</class>
<class name="news.entity.Comment" table="COMMENTS">
<id name="id" type="java.lang.Long">
<column name="COMMENT_ID"/>
<generator class="sequence">
<param name="sequence">COMMENT_SEQ</param>
</generator>
</id>
<property name="commentText" column="COMMENT_TEXT" />
<property name="creationDate" column="CREATION_DATE" />
<many-to-one name="news" fetch="select" column="news_id" cascade="all" insert="false" update="false"/>
</class>