dev@glassfish.java.net

Re: NetBeans doesn't import tables with no primary key

From: Cheng Fang <Cheng.Fang_at_Sun.COM>
Date: Wed, 02 Aug 2006 14:32:02 -0400

I agree the ideal solution is for them to add primary key constraint. I
guess their project may share database with other existing apps, and
their team doesn't own database. If they are to add PK constraint, they
would have to pause all other apps using this database, and it also
entails a large amount of testing work.

Cheng




Marina Vatkina wrote:

> Hi Cheng,
>
> I'm still not sure why the don't want to add PK constraints
> if those unique keys work the same way? It won't change anything
> in the data.
>
> thanks,
> -marina
>
> Cheng Fang wrote:
>
>> Thanks for all the input. I've created a NetBeans issue:
>>
>> http://www.netbeans.org/issues/show_bug.cgi?id=81716
>>
>> Cheng
>>
>>
>>
>>
>> Craig L Russell wrote:
>>
>>> Hi Cheng,
>>>
>>> On Aug 1, 2006, at 12:29 PM, Cheng Fang wrote:
>>>
>>>> Thanks, Gordon. I've posted your reply to the forum. I also
>>>> tried this usecase on Toplink/Hibernate + J2SE, and it does work.
>>>>
>>>> Now the question from the user is, NetBeans 5.5 beta 2 does not
>>>> support entity class generation from tables with no primary key.
>>>> In the generate-entity-class-from-table wizard, all tables with no
>>>> primary key are grayed out.
>>>>
>>>> Why would NetBeans disable a feature supported by Glassfish,
>>>> Toplink and Hiberante? Can we enable it?
>>>
>>>
>>>
>>>
>>> I was one of the people with input to the original design decision
>>> (5 years ago) to disallow generation of persistent classes where
>>> there was no primary key column in the table. We did not try to
>>> guess if the user intended that one of the unique constraints was
>>> supposed to map to an identity field.
>>>
>>> As I understand it, during generation of the class, the wizard
>>> needs additional user input or needs to take a guess as to which
>>> unique constraint should map to @Id. It's not clear what a rational
>>> default should be in the case that there are multiple unique
>>> constraints that might be mapped. And since the Id field is
>>> immutable after persist, it's not clear that you would have a
>>> usable class by mapping such a table.
>>>
>>> A feature in the wizard to guess the Id of a table without a
>>> primary key can be added but wasn't part of the original design
>>> specification.
>>>
>>> I'd suggest filing a feature request in Glassfish/Netbeans so we
>>> can track it formally.
>>>
>>> Regards,
>>>
>>> Craig
>>>
>>>>
>>>> Cheng
>>>>
>>>>
>>>>
>>>>
>>>> Gordon Yorke wrote:
>>>>
>>>>> Hello Cheng,
>>>>> If they know which columns correspond to the Unique Index they
>>>>> can map these as the PK's in EJB3 even though they are not
>>>>> specified as PK's in their tables. These @Id mappings would
>>>>> satisfy the EJB3.0 requirements but their application would not
>>>>> be required to use these PK's if they did not apply. All
>>>>> queries could be JPA queries.
>>>>> --Gordon
>>>>>
>>>>> -----Original Message-----
>>>>> From: Cheng.Fang_at_Sun.COM [mailto:Cheng.Fang_at_Sun.COM]On Behalf Of
>>>>> Cheng
>>>>> Fang
>>>>> Sent: Monday, July 31, 2006 3:30 PM
>>>>> To: dev_at_glassfish.dev.java.net
>>>>> Subject: primary tables with no primary key supported in EJB 3?
>>>>>
>>>>>
>>>>> Follow-up question for the user: is this supported in Glassfish EJB 3
>>>>> (Persistence)?
>>>>>
>>>>> http://gceclub.sun.com.cn/NASApp/sme/jive/thread.jsp?
>>>>> forum=22&thread=39131
>>>>>
>>>>> The reason he/she is asking this question is, his company used C and
>>>>> Informix 7 before, and it has been working pretty well for 7 years.
>>>>> They don't know why these tables have no primary key (most only have
>>>>> unique index), since original developers have left.
>>>>>
>>>>> Now they are working on a new project, and evaluating EJB 3
>>>>> (persistence) for possible use. They need to use these legacy
>>>>> data, but
>>>>> don't want change the database structure. They have hundreds of
>>>>> tables
>>>>> like this and some talbes contain several million records.
>>>>>
>>>>> In Glassfish EJB 3, is it possible to loosen the validation and allow
>>>>> these apps to deploy and run, maybe with some sort of warning?
>>>>> The user
>>>>> said situations like this is not uncommon. And any advice in
>>>>> general?
>>>>>
>>>>> Their app deploys and runs fine on Jboss.
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Cheng
>>>>>
>>>>>
>>>>> Marina Vatkina wrote:
>>>>>
>>>>>
>>>>>> No, we do not support primary tables without primary keys for
>>>>>> CMP 2.1.
>>>>>>
>>>>>> regards,
>>>>>> -marina
>>>>>>
>>>>>> Cheng Fang wrote:
>>>>>>
>>>>>>
>>>>>>> This user is using ejb 2.1 on SJSAS PE 9. The Student table doesn't
>>>>>>> designate a primary key, but in ejb code he uses 'id' as if it
>>>>>>> was a
>>>>>>> primary key. The app failed to deploy on SJSAS 9. But he was
>>>>>>> able to
>>>>>>> deploy and run the same app on JBoss.
>>>>>>>
>>>>>>> error messages (hope you can tell something from a few keywords)
>>>>>>> Deploying application in domain failed; 运行 EJBC 时发生错 误 --
>>>>>>> 来自
>>>>>>> EJB 编译器的致命错误 -- JDO74025: JDOCodeGenerator: 验 证应用程序
>>>>>>> “EJBModule1” 的模块“EJBModule1”中的 CMP Bean“Fhdsckfhz”时捕获异常:
>>>>>>> JDO72335: 如果与生 成的类
>>>>>>> testsss.FhdsckfhzBean96247497_JDOState 对应
>>>>>>> 的 Bean 的表 fhdsckfhz 被映射为主表, 则它必须有主 键。请选择其它
>>>>>>> 主 表或
>>>>>>> 验证模式文件的内容是否正确。
>>>>>>>
>>>>>>> Once he specified 'id' as primary key in database table, it deploys
>>>>>>> and runs fine. So the question is, does SJSAS 9 ejb 2.x support
>>>>>>> tables with no primary key?
>>>>>>>
>>>>>>> More details are here:
>>>>>>> http://gceclub.sun.com.cn/NASApp/sme/jive/thread.jsp?
>>>>>>> forum=22&thread=39131
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> --------------------------------------------------------------------
>>>>>> -
>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>
>>>
>>> Craig Russell
>>> clr@apache.org http://db.apache.org/jdo
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>