Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Toplink и кеширование коллекций / 4 сообщений из 4, страница 1 из 1
26.08.2013, 18:11:13
    #38377761
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Toplink и кеширование коллекций
Есть связка Glassfish 3 + toplink +Oracle

Есть бин в котором объявлено что у него есть коллекция других бинов :

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class TestGroup implements Serializable {
    private static final long serialVersionUID = 1L;
    
    @Id
    @Column(name = "TEST_GROUP_ID")
    private Integer testGroupId;
    
    @OneToMany(fetch = FetchType.LAZY)
    @JoinColumn(name = "TEST_GROUP_ID")
    private List<TestGroupRecipient> groupRecipients  = new ArrayList<TestGroupRecipient>();
}



так вот при первом запросе - все отлично вытаскивается , коллекция из 2х элементов.

После этого toplink перестает делать подзапрос и перестает обновлять эту коллекцию.
Т.е. если руками в базе кто то добавил 3й элемент (вставка не из моей системы с базой работают другие клиенты)

то я про это никогда не узнаю !!!

Как быть ?
...
Рейтинг: 0 / 0
27.08.2013, 09:18:02
    #38378126
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Toplink и кеширование коллекций
Все фасадные бины создаются так :

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public abstract class AbstractFacade<T> {
    private Class<T> entityClass;

    public AbstractFacade(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    protected abstract EntityManager getEntityManager();

    public T create(T entity) {
        getEntityManager().persist(entity);
        return entity;
    }

....

@Stateless
public class TestGroupFacade extends AbstractFacade<TestGroup> {
    @PersistenceContext(unitName = "OracleTest")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public TestGroupFacade() {
        super(TestGroup.class);
    }
...



вызов в коде :

я выставил <property name="eclipselink.logging.level" value="ALL"/> из вывода видно , что первый раз он вытягивает 1 запросом сам объект , втором коллекцию , после этого - при любом обращении идет только один запрос на выборку элемента, второго запроса нет ?!
т.е. каждый раз выполняется только find
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
    @Inject
    private TargetGroupFacade targetGroupFacade;

...

TestGroup testgroup = testGroupFacade.find(ptestgroupId); // первый select 
List<TestGroupRecipient> list = testgroup.getGroupRecipients(); //  один раз выполняется select



...

// если  я сам добавляю - изменения :

 TestGroupRecipient recipient = testGroupRecipientFacade.find(recipientId);
 recipient.setRecipientId(null); // ID
 testGroupRecipientFacade.create(recipient);


testgroup.getGroupRecipients().add(recipient);
testGroupFacade.edit(testgroup); // видимо только так происходит обновление в кеше !?
...
Рейтинг: 0 / 0
27.08.2013, 09:26:23
    #38378137
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Toplink и кеширование коллекций
eclipselink
...
Рейтинг: 0 / 0
27.08.2013, 09:47:41
    #38378157
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Toplink и кеширование коллекций
Atum1 eclipselink

Почитал документацию

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching

добавил в persistence-unit

Код: java
1.
2.
3.
4.
5.
            <property name="eclipselink.cache.shared.default" value="false"/>

            <property name="eclipselink.logging.level" value="ALL"/>
            <property name="eclipselink.logging.level.sql" value="FINE"/>
            <property name="eclipselink.logging.parameters" value="true"/>



теперь каждый вызов это запрос к БД.

Что является вторым крайним случаем (нет кеширования :) )

можно ли как то на уровне бина - описать что конкретная коллекция не должна кешироваться ?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Toplink и кеширование коллекций / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]