Проблема с аннотацией JPA @Transient - PullRequest
0 голосов
/ 11 августа 2011

Я пытаюсь отобразить базу данных из "Drupal" с помощью Hibernate и JPA, чтобы создать 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 "

Но когда я заканчиваю первое" для ", я сделал тест в том же методе, чтобы убедиться, что значения в порядке, но я получаю следующие значения: 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());

        }
    }

1 Ответ

0 голосов
/ 11 августа 2011

Вы должны использовать 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;
}

Обратите внимание, что я не знаю ваш код.Поэтому я не могу быть более наглядным.

С уважением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...