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 17:29:08 -0400

It's a great idea. I'll post it to the forum. Thanks for all the advice.

Cheng

Marina Vatkina wrote:

> Another option would be to replicate their DDL on e.g. Derby, add
> constraints,
> create and map entities. Then drop the constraints and test the app. They
> probably need testing not on a production server any way.
>
> thanks,
> -marina
>
>
> Cheng Fang wrote:
>
>> 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
>>>
>>
>> ---------------------------------------------------------------------
>> 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
>