Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSP — с чего начать? 
V
    Опции темы
Stampede
Дата 3.7.2007, 23:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Всем привет, я вернулся!

Очень рад, что дело не стояло на месте. Теперь вот какой важный момент.

Цитата(fixxer @  29.6.2007,  01:20 Найти цитируемый пост)
Хочу заметить, что JPA вполне можно использовать в Java SE.


Цитата(powerOn @  1.7.2007,  09:40 Найти цитируемый пост)
Как правильно заметил fixxer, JPA можно легко использовать в stand-alone программах.


Это исключительно хорошая новость! Очень жаль, что в документации по JPA этот момент не акцентруется. Я ведь говорю: я заходил, читал материалы, в том числе Java Persistence API FAQ. Везде разговор о JPA ведется в контексте EJB и EE. А вот тут так и вообще открытым текстом:

Цитата

QWill the Java Persistence API become part of Java SE?

A: There are no current plans to include the Java Persistence API in Java SE. As the Java Persistence API evolves, however, it is likely that this issue will be considered by the Java SE expert group in a future Java SE release. 


Дальше читать резко расхотелось. И только сейчас, уже зная правильный ответ, прочел более внимательно, и нашел упоминания о возможности использования JPA в standalone приложениях:

Цитата

In addition, the Java Persistence API is usable both within Java SE environments as well as within Java EE, allowing many more developers to take advantage of a standard persistence API.


Так вот, в свете этой новости ситуация меняется самым радикальным образом. Тем более что у Hibernate уже имеется адаптер для JPA (fixxer ловит плюса за отличную новость). Категорически предлагаю diablero переделать персистенцию в вендорно-независимом виде, то есть через JPA и с аннотациями. Пока еще не слишком поздно.

ЗЫ. Заодно вопрос: а ты точно уверен, что хочешь мускуль? Есть для такого выбора какие-то веские основания?


Это сообщение отредактировал(а) Stampede - 3.7.2007, 23:58


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
y3u
Дата 4.7.2007, 06:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 7
Всего: 13



Цитата(Stampede @  4.7.2007,  00:54 Найти цитируемый пост)

Цитата

In addition, the Java Persistence API is usable both within Java SE environments as well as within Java EE, allowing many more developers to take advantage of a standard persistence API.

Так вот, в свете этой новости ситуация меняется самым радикальным образом. Тем более что у Hibernate уже имеется адаптер для JPA 


"вам хочется песен? их есть у меня!"... покажите рабочий примерчик с JPA в стендэлоне smile Пожалуйста, пожалуйста smile



--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
powerOn
Дата 4.7.2007, 07:21 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



Цитата(y3u @  4.7.2007,  07:18 Найти цитируемый пост)
"вам хочется песен? их есть у меня!"... покажите рабочий примерчик с JPA в стендэлоне smile Пожалуйста, пожалуйста smile




Вы хотели пати? нати  smile :

Что потребуется: Библиотеки для Hibernate Core, Hibernate Entity Manager (они есть на сайте hibernate), JDBC драйвер для MySQL. 

В нашем простом проекте будет всего 3 файла:
1) persistence.xml - файл конфигурации JPA.
2) jpatest.MyEntity - простая сущность. будем её сохранять в БД.
3) jpatest.Main - это класс содержит логику сохранения. 

persistence.xml
Здесь описываем persistence-unit - параметры соединения с БД, диалекты, транзакции, подключаем Entity классы и прочее. Данный файл лежит в каталоге META-INF. Видимо по умолчанию так принято.
Код

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="JpaTestPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>jpatest.MyEntity</class>
    <properties>
      <property name="hibernate.connection.username" value="root"/>
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
      <property name="hibernate.connection.password" value="12345"/>
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/testdb"/>
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
  </persistence-unit>
</persistence>


jpatest.MyEntity
Это класс-сущность. Замапим его на таблицу MyTable используя аннотацию @Table(name="MyTable"). Имеется у данного класа 2 поля - id (главный ключ с автогенерацией) и someData. Опишем их свойства так же с помощью аннотаций.
Код

package jpatest;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Table;

@javax.persistence.Entity
@Table(name="MyTable")
public class MyEntity implements Serializable
{
    @javax.persistence.Id
    @Column(name="id")
    @javax.persistence.GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)
    private Long id;
    
    @Column(name="someData")
    private String someData;
    
    /** Creates a new instance of MyEntity */
    public MyEntity()
    {
    }

    public Long getId()
    {
        return this.id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }

    public String getSomeData()
    {
        return someData;
    }

    public void setSomeData(String someData)
    {
        this.someData = someData;
    }
    
    @Override
    public int hashCode()
    {
        int hash = 0;
        hash += (this.id != null ? this.id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object)
    {
        if (!(object instanceof MyEntity)) {
            return false;
        }
        MyEntity other = (MyEntity) object;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) return false;
        return true;
    }

    @Override
    public String toString()
    {
        return "jpatest.MyEntity[id=" + id + "]";
    }
}


jpatest.Main
Данный код сохраняет объект типа MyEntity в БД.
Сначало создаем фабрику для EntityManager-а используя описание нашего persistence-unit-а. Это можно сделать по имени.
Далее создаем сам EntityManager и используем его для сохранения объекта.
Код

package jpatest;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Main
{
    private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("JpaTestPU");
    
    /** Creates a new instance of Main */
    public Main()
    {
    }
    
    public static void main(String[] args)
    {
        EntityManager em = emf.createEntityManager();

        MyEntity myEntity = new MyEntity();
        myEntity.setSomeData("some data");
        
        em.getTransaction().begin();
        try 
        {
            em.persist(myEntity);
            em.getTransaction().commit();
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
            em.getTransaction().rollback();
        } 
        finally {
            em.close();
        }
    }
}



Не трудно заметить, что работа с JPA весьма похожа на работу с Hibernate.

Это сообщение отредактировал(а) powerOn - 4.7.2007, 07:23


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
batigoal
Дата 4.7.2007, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Stampedediablero и остальные: не будете возражать, если дискуссия о выборе персистенса перекочует в отдельный топик?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
diablero
Дата 4.7.2007, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Цитата(Stampede @  3.7.2007,  23:54 Найти цитируемый пост)
 Категорически предлагаю diablero переделать персистенцию в вендорно-независимом виде, то есть через JPA и с аннотациями. Пока еще не слишком поздно.

Категорически согласен.
Цитата(Stampede @  3.7.2007,  23:54 Найти цитируемый пост)
ЗЫ. Заодно вопрос: а ты точно уверен, что хочешь мускуль? Есть для такого выбора какие-то веские основания?

Основание только одно, это единственная имеющаяся у меня база данных. Если есть какие-то основания перейти на что-то другое, то скажи на что.

Stampede давай определим план действий. Что мне сейчас в итоге нужно сделать и как это оформим. Я имею ввиду структуру классов для работы с базой данных. Будем ли реарганизовывать менеджеры или их пока оставим для генерирования исходных данных.

Добавлено через 3 минуты и 17 секунд
Цитата(batigoal @  4.7.2007,  07:46 Найти цитируемый пост)
 diablero и остальные: не будете возражать, если дискуссия о выборе персистенса перекочует в отдельный топик?

Конечно нет


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 4.7.2007, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(batigoal @  3.7.2007,  22:46 Найти цитируемый пост)
Stampede, diablero и остальные: не будете возражать, если дискуссия о выборе персистенса перекочует в отдельный топик?


Я бы все-таки оставил здесь - для удобства всех заинтересованных, кто будет читать эту ветку в будущем. Как ни крути, выбор способа персистенции - это немаловажный момент в разработке сайта, так что высказанные здесь соображения должны помочь людям сориентироваться.

Теперь о реализации. powerOn, спасибо за пример.

Цитата(diablero @  4.7.2007,  08:06 Найти цитируемый пост)
Stampede давай определим план действий. Что мне сейчас в итоге нужно сделать и как это оформим. Я имею ввиду структуру классов для работы с базой данных. Будем ли реарганизовывать менеджеры или их пока оставим для генерирования исходных данных.


Одно из ключевых преимуществ ORM нового поколения (и JPA в том числе) заключается в том, что они позволяют проектировать DAO как обычные классы, или POJO (Plain Old Java Objects), без необходимости выводить их родословную из каких-то специфических классов или интерфейсов. Поэтому User и Post остаются у нас как были, только добавятся необходимые аннотации.

Экземпляр EntityManager у нас будет один на все приложение. В методе Infinite.init() нужно предусмотреть его инициализацию, и потом выдавать всем желающим через геттер. Преимущество от использования единственного менеджера энтитей в том, что тогда он сможет отслеживать и разруливать обновления объектов простым и ненакладным образом. Ну и понятно, не надо будет для каждой транзакции заставлять фабрику заниматься инициализацией нового экземпляра менеджера.

В UserManager и PostManager убираем  работу с моками, при инициализации получаем (от Infinite) и сохраняем локально экземпляр EntityManager. Методы getPost(int id), getUser(int id), getUsers() и login(String name, String password) переписываем для работы с базой.

Все действия по созданию/управлению транзакциями кодируем вне менеджеров. Пока что будем делать это прямо в тесте:

Код

EntityManager em = Infinite.getEntityManager();
UserManager userman = Infinite.getUserManager();
Transaction tx = null;
try {
    tx = em.getTransaction();
    tx.begin();
    User user = userman.getUser(1234);
    logger.info(user);
    tx.commit();
} catch (Exception e) {
    if (tx != null) {
        tx.rollback();
    }
    throw new RuntimeException(e);
}


Все, пока этого достаточно.

Цитата(diablero @  4.7.2007,  08:06 Найти цитируемый пост)
Основание только одно, это единственная имеющаяся у меня база данных. Если есть какие-то основания перейти на что-то другое, то скажи на что.


Бесплатных СУБД много, так что на мускуле свет клином не сошелся. В принципе в последних версиях он уже вроде стал пригодным для работы, но раньше, когда в нем не было поддержки транзакций, вложенных подзапросов и много чего еще, его вообще нельзя было считать за нормальную базу.

В общем, советую поспрошать в подфоруме СУБД, послушать разные мнения. От себя порекомендовал бы Postgres - вполне взрослая база, в меру быстрая и надежная, есть на большинстве Java хостингов.

Но дело, конечно, хозяйское.


Это сообщение отредактировал(а) Stampede - 4.7.2007, 20:02


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 4.7.2007, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



to fixxer 
Ты говорил, что можешь запостить книжку Java Persistence with Hibernate.
Нужно, если есть возможность.

У меня пока проблемы с пониманием сути и важности Hibernate JPA. Вроде как оно долно упростить нам архитектуру приложения и избавить от множества настроек. А сама работа с базой данных аналогична. Т.е. все настраивается в файле persistence.xml.

В связи с этим у меня сразу вопрос, с чем я столкнулся, это как задать путь к файлу?

Это сообщение отредактировал(а) diablero - 4.7.2007, 22:36


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
powerOn
Дата 4.7.2007, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



Цитата(diablero @  4.7.2007,  23:18 Найти цитируемый пост)
В связи с этим у меня сразу вопрос, с чем я столкнулся, это как задать путь к файлу? 

К какому? К persistence.xml? если про него речь, то просто положи его в папку META-INF, которая будет в корне исходников.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Stampede
Дата 4.7.2007, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(diablero @  4.7.2007,  13:18 Найти цитируемый пост)
У меня пока проблемы с пониманием сути и важности Hibernate JPA. Вроде как оно долно упростить нам архитектуру приложения и избавить от множества настроек.


Нет, не столько упростить, сколько избавить от привязки к конкретному продукту.

Понимаешь, когда ты работаешь с Hibernate напрямую, у тебя в проекте появляется множество зависимостей: формат конфига, названия аннотаций, имена классов фабрик и менеджеров, и т. д. В принципе ничего особенно страшного, но вот на другую ORM так запросто уже не перейдешь. И дело тут не в том, что ты будешь десять раз переводить прогу с Hibernate на TopLink, а с TopLink на iBatis, а в том, что при работе через единый API ты нарабатываешь базу для переиспользования в других проектах и приобретаешь "конвертируемый" опыт. И можешь быть уверен, в самом скором будущем работодатели вместо Hibernate будут требовать от кандидатов знание JPA. Потому что так будет намного проще и удобнее для всех.

Цитата(diablero @  4.7.2007,  13:18 Найти цитируемый пост)
В связи с этим у меня сразу вопрос, с чем я столкнулся, это как задать путь к файлу? 


Уточни, о каком файле идет речь. persistence.xml? Не знаю, почитай доку. Должен быть какой-то способ. Может, переменную окружения можно как-то задействовать.


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 4.7.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Цитата(powerOn @  4.7.2007,  22:39 Найти цитируемый пост)
просто положи его в папку META-INF, которая будет в корне исходников.

спасибо, так работает. А по другому ни как?

У меня вот такое исключение валиться, не знаю почему. Сделал все как в примере у  powerOn
Код

java.lang.IllegalArgumentException: Unknown entity: ru.selfexpression.User
    at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:216)
    at ru.selfexpression.test.Test.main(Test.java:30)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:86)






--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
powerOn
Дата 4.7.2007, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



скорее всего ты забыл у класса сущности указать аннотацию @javax.persistence.Entity. Выложи пожалуйста этот класс сюда.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
diablero
Дата 4.7.2007, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Код

package ru.selfexpression;

import javax.persistence.Table;
import javax.persistence.Column;
import java.util.Date;

@javax.persistence.Entity
@Table(name="user")
public class User {
    @javax.persistence.Id
    @Column(name="user_id")
    @javax.persistence.GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)
    private int id;
    @Column(name="user_name")
    private String name;
    @Column(name="user_password")
    private String password;
    @Column(name="user_group")
    private String group;
    @Column(name="user_avatar")
    private String avatar;
    @Column(name="user_birthday")
    private Date birthday;
    @Column(name="user_gender")
    private String gender;
    @Column(name="user_city")
    private String city;
    @Column(name="user_country")
    private String country;
    @Column(name="user_signature")
    private String signature;
    @Column(name="user_mail")
    private String mail;
    @Column(name="user_icq")
    private String icq;
    @Column(name="user_posts")
    private int posts;
    @Column(name="user_dateRegistration")
    private Date dateRegistration;

    public static final String GENDER_MALE = "male";
    public static final String GENDER_FEMALE = "female";

    public User() {

    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getPassword() {
        return password;
    }
    public void setGroup(String group) {
        this.group = group;
    }
    public String getGroup() {
        return group;
    }
    public void setAvatar(String filePath) {
        this.avatar = filePath;
    }
    public String getAvatar() {
        return avatar;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getGender() {
        return gender;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getCity() {
        return city;
    }
    public void setCountry(String country) {
        this.country = country;
    }
    public String getCountry() {
        return country;
    }
    public void setSignature(String signature) {
        this.signature = signature;
    }
    public String getSignature() {
        return signature;
    }
    public void setMail(String mail) {
        this.mail = mail;
    }
    public String getMail() {
        return mail;
    }
    public void setICQ(String icq) {
        this.icq = icq;
    }
    public String getICQ() {
        return icq;
    }
    public void setPosts(int posts) {
        this.posts = posts;
    }
    public int getPosts() {
        return posts;
    }
    public void setDateRegistration(Date dateRegistration) {
        this.dateRegistration = dateRegistration;
    }
    public Date getDateRegistration() {
        return dateRegistration;
    }
}



Код

<?xml version="1.0" encoding="UTF-8"?>    
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">    
  <persistence-unit name="Infinite" transaction-type="RESOURCE_LOCAL">    
    <provider>org.hibernate.ejb.HibernatePersistence</provider>    
    <class>ru.selfexpression.User</class>    
    <properties>    
      <property name="hibernate.connection.username" value="root"/>    
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>    
      <property name="hibernate.connection.password" value=""/>    
      <property name="hibernate.connection.url" value="jdbc:mysql://diablero:3306/infinite"/>    
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>    
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>    
      <property name="hibernate.hbm2ddl.auto" value="update"/>    
    </properties>    
  </persistence-unit>    
</persistence>



--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 4.7.2007, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Вот еще что вычитал:

Цитата

persistence.xml files define EntityManagerFactories. The createEntityManagerFactory  methods search for persistence.xml files within the META-INF directory of any CLASSPATH  element. For example, if your CLASSPATH contains the conf directory, you could place an EntityManagerFactory definition in conf/META-INF/persistence.xml.

Источник: http://openjpa.apache.org/docs/latest/manual/manual.html


Давай действительно так и сделаем, и conf добавим к classpath. Заодно можно будет убрать ручное задание пути к конфигу log4j - сам будет находиться.

Добавлено через 7 минут и 50 секунд
Дак ты же в объявлени классса не указал implements Serializable!


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 5.7.2007, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Цитата(Stampede @  4.7.2007,  23:40 Найти цитируемый пост)
Дак ты же в объявлени классса не указал implements Serializable!

Увидел когда постилsmile
Exception только изменился 
Код

javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: ru.selfexpression.User




--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
diablero
Дата 5.7.2007, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Проблемку решил.
Заменив метод persist на merge

По базе. Я сейчас сижу через GPRS. Попрошу, мне скачают Postgres. Только это будет не скоро.
Если не трудно дай прямой линк на закачку базы и драйвера к ней. 

Вечером приступлю к 
Цитата(Stampede @  4.7.2007,  19:42 Найти цитируемый пост)
В UserManager и PostManager убираем  работу с моками, при инициализации получаем (от Infinite) и сохраняем локально экземпляр EntityManager. Методы getPost(int id), getUser(int id), getUsers() и login(String name, String password) переписываем для работы с базой.


Долг зовет, а еще не спалsmile

Это сообщение отредактировал(а) diablero - 5.7.2007, 00:48


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1480 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.