![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
EntityBean и PrimaryKey
asg © (2002-04-17 09:57:00)Теперь у меня вопрос по EntityBean и PrimaryKey, генерируемый БД.
Предположим, в БД Interbase имеется таблица:
CREATE TABLE FILIAL (
IDFILIAL INTEGER NOT NULL,
NAMEFILIAL NAME NOT NULL,
PRIMARY KEY (IDFILIAL));
CREATE UNIQUE INDEX XAK1FILIAL ON FILIAL (NAMEFILIAL);
CREATE UNIQUE INDEX XPKFILIAL ON FILIAL (IDFILIAL);
Причем, IDFILIAL генерируется при помощи триггера
CREATE TRIGGER ADDFILIAL FOR FILIAL
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
if (NEW.IDFilial is null) then
NEW.IDFilial = gen_id (GenIDFilial, 1);
END
Далее. Имеется EntityBean:
public interface FilialHome extends EJBHome
{
public Filial create(int idfilial, String namefilial) throws RemoteException, CreateException;
public Filial create(String namefilial) throws RemoteException, CreateException;
public Filial create(int idfilial) throws RemoteException, CreateException;
public Filial findByPrimaryKey(int primaryKey) throws RemoteException, FinderException;
}
public abstract class FilialBean implements EntityBean
{
EntityContext entityContext;
public int ejbCreate(int idfilial, String namefilial) throws CreateException
{
setIdfilial(idfilial);
setNamefilial(namefilial);
return 0;
}
public int ejbCreate(int idfilial) throws CreateException
{
return ejbCreate(idfilial, null);
}
public int ejbCreate(String namefilial) throws CreateException
{
}
public void ejbPostCreate(int idfilial, String namefilial) throws CreateException
{
}
public void ejbPostCreate(String namefilial) throws CreateException
{
}
public void ejbPostCreate(int idfilial) throws CreateException
{
ejbPostCreate(idfilial, null);
}
public void ejbRemove() throws RemoveException
{
}
public void ejbActivate()
{
}
public void ejbPassivate()
{
}
public void ejbLoad()
{
}
public void ejbStore()
{
}
public void setEntityContext(EntityContext entityContext)
{
this.entityContext = entityContext;
}
public void unsetEntityContext()
{
entityContext = null;
}
public abstract int getIdfilial();
public abstract void setIdfilial(int idfilial);
public abstract String getNamefilial();
public abstract void setNamefilial(String namefilial);
}
Когда клиент вызывает метод Create(id, name), то все работает хорошо.
А вот когда клиент вызывает метод Create(name), то возникает Exception.
Подскажите, плиз, как сделать так, чтобы объект создавался, но ID при этом генерировался сервером БД.
Michelson (2002-04-25 10:50:00) [1]По спецификации EJB в методе ejbCreate твой IDFILIAL ДОЛЖЕН БЫТЬ ОПРЕДЕЛЕН ЕЩЕ ДО(!) ЗАПИСИ В СТРОКИ В ТАБЛИЦУ. И тригер тут не поможет.
Мы делали так:
1. Определяли в БД секвенсор для таблицы
2. Перед созданием EntityBean-a вытаскивали из него (секвенсора) следующий ID (для этого написали специальный SessionBean, но это как тебе удобно)
3. И с готовым ID делали новый бин:
public int ejbCreate(String namefilial) throws CreateException
{
ctx = new InitialContext();
Object ref = ctx.lookup("NextIdSessionBean");
NextIdSessionBeanHome home = (NextIdSessionBeanHome)ref;
NextIdSessionBean bean = home.create();
setIdfilial(bean.getNextIdFor("FILIAL"));
setNamefilial(namefilial);
}
В этом бине написан стандартный код с использованием JDBC типа
SELECT NEXTVAL FROM SEQUENCER..... Но это уже другая история