我正在尝试使用Hibernate和JPA将数据库从“Drupal”映射到一个Java层来处理数据。
在一个类中,我需要添加一个名为“rank”的属性以便以后使用它,但该属性在数据库中不存在,所以我把@Transient注释...
我使用set方法在其上放置一个值,但后来,这些值是错误的(我不明白为什么)所以...有一种方法可以在不修改数据库的情况下实现它吗?
非常感谢
编辑:
班级撰稿人
@Entity
@Table( name = "biblio_contributor_data")
public class Contributors implements Comparable {
@Id
private int cid;
private String name;
private String firstname;
private String lastname;
private Member memberProfile;
@Trasient
private int rank;
然后,我有一些文章,其中有贡献者列表作为属性。
我有一份文章清单。现在我必须更新他们的排名,并按排名对贡献者列表进行排序:
public static List<Article> sortByRankArticles(EntityManager em, List<Article> list){
for (Article article:list){
for(Contributors c:article.getAuthors()){
List<BiblioContributor> result = em.createQuery("from BiblioContributor where nid = "+article.getId() +" and id.cid = "+c.getCid()).getResultList();
c.setRank(result.get(0).getId().getRank());
System.out.println(c.getRank());
}
Collections.sort(list);
}
使用那个system.out ...我检查了值是否正确,“0,1,2,3,4,5”
但是当我完成第一个“for”时,我用相同的方法进行了测试,以证明值是否正常,但我得到以下值:0,0,1,2,2,3这是错
for (Article article:list){
System.out.println("///////"+article.getId());
for(Contributors c:article.getAuthors()){
System.out.println("***"+c.getRank());
}
}
答案 0 :(得分:0)
您应该使用Formulas
直接从数据库中计算它。
您放置要用于在数据库中计算的查询。
实现这一目标的另一种方法是使用Formulas
放置sql
对于此表中存在的position
列:
@Formula("position + 1")
public int getRank() {
return this.rank;
}
另一种方法是PostLoad
计算
@PostLoad
public void onPostLoad() {
int rank;
// Calculate Rank
this.rank = rank;
}
请注意,我不知道您的代码。所以我不能更具描述性。
问候。