Hi,

References to Entities and ValueObjects from BasicTypes are not supported.
We should have added a constraint (error message) for that. We can probably
support it in future version. I think hibernate has support for it, but not
mandatory in jpa 1.0. I think it is in jpa 2.0.

/Patrik


dmadunic wrote:
> 
> Hi all,
> in the advance tutorial description of the BasicType states:
> 
> "BasicType is typically used for fundamental types, for example different
> quantities such as Money,
> or range of values."
> 
> So, the emphasis was on "is typically used for fundamental types," which
> implies that i can use references to, lets say Entities in the BasicType
> if i would like to. Or not?
> 
> I took library example and modiefed Country to be Entity and not Enum. So
> all of my Countries are stored in Database and when a new Country popup i
> do not need to modify code, compile, distribute, etc. just need to insert
> new record in database.
> So my Person module after this change looks like this:
> 
> Module person {
>         Service PersonService {
>           findPersonByName => PersonRepository.findPersonByName;
>         }
> 
>         Entity Person {
>           gap
>           scaffold
>           Date birthDate past
>           - @Gender sex !changeable
>           - @Ssn ssn key
>           - @PersonName name
> 
>           Repository PersonRepository {
>               List<@Person> findPersonByName(String name) => AccessObject;
>               save;
>               save(Collection<@Person> entities);
>               findByQuery;
>               findByExample;
>               findByKeys;
>           }
>         }
> 
>         BasicType Ssn {
>           String number key length="20"
>           - @Country country key
>         }
> 
>         BasicType PersonName {
>           String first
>           String last
>         }
> 
>         enum Gender {
>             FEMALE("F"),
>             MALE("M")
>         }
> 
>        Entity Country {
>                       scaffold
>                       String code key
>                       String name
>                       int numeric
>       
>                       Repository CountryRepository {
>                               @Country findCountryByCode(String code) throws
> CountryNotFoundException => findByKey;
>                               findById;
>                               findAll;
>                               save;
>                               delete;
>                               countAll;
>                       }
>               }
>     }
> }
> 
> However, when i generate sources now, in the the Ssn java class I see
> following definition for the Country object:
> @Transient
> @NotNull
> private Country country;
> 
> So, it is declared as Tranisent field!
> When i looked at the generated PersonBase java class i found another
> surprise, definition of the embeded object Ssn was as follows:
> 
> @Embedded
>     @AttributeOverrides({...@attributeoverride(name = "number",column =
> @Column(name = "SSN_NUMBER",nullable = true,length = 20)
>         )
>         , })
> @NotNull
> private Ssn ssn;
> 
> So, no reference to country at all?
> But, Person java class stated following (i first deleted old class so the
> new one was generated to reflect changes in the model):
> 
> @Entity
> @Table(name = "PERSON", uniqueConstraints = @UniqueConstraint(columnNames
> =  {
>     "SSN_NUMBER", "SSN_COUNTRY"}
> )
> )
> public class Person extends PersonBase {
>     private static final long serialVersionUID = 1L;
> 
>     protected Person() {
>     }
> 
>     public Person(Gender sex, Ssn ssn) {
>         super(sex, ssn);
>     }
> }
> 
> However, field with name SSN_COUNTRY is nowhere defined? No Hibernate
> annotation references this field.
> 
> Then, i modifed sculptor-generator.properties and declared
> db.product=mysql to see what would be the definition of the table. And as
> I expected the PERSON table does not contain any field which would store
> reference to COUNTRY table, and no FOREIGN KEY definition exists anywhere.
> Although, funnily, invalid unique constraint is created!
> 
> CREATE TABLE PERSON (
>   ID BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
>   BIRTHDATE DATE NOT NULL,
>   CREATEDDATE TIMESTAMP,
>   CREATEDBY VARCHAR(50),
>   LASTUPDATED TIMESTAMP,
>   LASTUPDATEDBY VARCHAR(50),
>   VERSION BIGINT NOT NULL,
>   SSN_NUMBER VARCHAR(20) NOT NULL,
>   NAME_FIRST VARCHAR(100) NOT NULL,
>   NAME_LAST VARCHAR(100) NOT NULL,
>   SEX VARCHAR(100) NOT NULL,
>   CONSTRAINT UNIQUE (SSN_NUMBER, SSN_COUNTRY)
> 
> );
> 
> So, as far as i can see, it seems that references to the Entities can not
> be used in the BasicTypes, is this correct or not?
> 
> Huh, i hope i have been clear enough.
> 
> best
> Domagoj 
> 
> 
> No mention of reference to COUNTRY?
> 
> 

-- 
View this message in context: 
http://old.nabble.com/BasicType-with-reference-to-Entity-tp26866241s17564p26871376.html
Sent from the Fornax-Platform mailing list archive at Nabble.com.


------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
_______________________________________________
Fornax-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/fornax-developer

Reply via email to