Как сопоставить таблицу с другой таблицей поиска, используя JPA? - PullRequest
2 голосов
/ 04 мая 2010

У меня есть две таблицы:

1) Приложение (int appid, int statusid, String appname, String appcity с методами getter и Setter)

2) App_Status (int statusid, String statusDescription с методами установки и получения)

Я хочу сопоставить таблицу приложений с App_Status, чтобы мне не приходилось запрашивать отдельную таблицу App_Status для получения statusDescription. Одна вещь, которую я должен быть осторожным, заключается в том, что независимо от того, что (вставка, обновление или удаление) таблицы Application таблица App_Status должна быть неизменной, это означает, что это таблица только для чтения, которая поддерживается DBA внутри и используется только для таблицы поиска. *

Я использую аннотации JPA, поэтому, пожалуйста, предложите, как с этим справиться.

1 Ответ

2 голосов
/ 05 мая 2010

Следующее должно работать. Сопоставьте объект AppStatus в таблице App_Status:

@Entity
public class AppStatus {
    @Id
    private Long id;
    private String statusDescription;

    // getters, setters, hashCode, equals...
}

И объявить это с однозначной связью в Application сущности:

@Entity
public class Application {
    @Id
    private Long id;
    private String appName;
    private String appCity;

    @OneToOne(fetch = FetchType.EAGER, optional = false) 
    @JoinColumn(name = "statusid", nullable = false, insertable = false, updatable = false)
    private AppStatus appStatus;

    // getters, setters, hashCode, equals...
}

Обратите особое внимание на следующие детали:

  • Я определил режим выборки для EAGER (обратите внимание, что EAGER используется по умолчанию, если вы его не определяете), чтобы AppStatus был загружен при загрузке Application.
  • Я не определил ни одного параметра каскадирования, чтобы никакие операции не каскадировались с Application до AppStatus.
  • , чтобы получить все Application, используйте FETCH JOIN

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