Java Doc for SFieldReference.java in  » Database-ORM » SimpleORM » simpleorm » core » Java Source Code / Java DocumentationJava Source Code and Java Documentation

Java Source Code / Java Documentation
1. 6.0 JDK Core
2. 6.0 JDK Modules
3. 6.0 JDK Modules com.sun
4. 6.0 JDK Modules com.sun.java
5. 6.0 JDK Modules sun
6. 6.0 JDK Platform
7. Ajax
8. Apache Harmony Java SE
9. Aspect oriented
10. Authentication Authorization
11. Blogger System
12. Build
13. Byte Code
14. Cache
15. Chart
16. Chat
17. Code Analyzer
18. Collaboration
19. Content Management System
20. Database Client
21. Database DBMS
22. Database JDBC Connection Pool
23. Database ORM
24. Development
25. EJB Server geronimo
26. EJB Server GlassFish
27. EJB Server JBoss 4.2.1
28. EJB Server resin 3.1.5
29. ERP CRM Financial
30. ESB
31. Forum
32. GIS
33. Graphic Library
34. Groupware
35. HTML Parser
36. IDE
37. IDE Eclipse
38. IDE Netbeans
39. Installer
40. Internationalization Localization
41. Inversion of Control
42. Issue Tracking
43. J2EE
44. JBoss
45. JMS
46. JMX
47. Library
48. Mail Clients
49. Net
50. Parser
51. PDF
52. Portal
53. Profiler
54. Project Management
55. Report
56. RSS RDF
57. Rule Engine
58. Science
59. Scripting
60. Search Engine
61. Security
62. Sevlet Container
63. Source Control
64. Swing Library
65. Template Engine
66. Test Coverage
67. Testing
68. UML
69. Web Crawler
70. Web Framework
71. Web Mail
72. Web Server
73. Web Services
74. Web Services apache cxf 2.0.1
75. Web Services AXIS2
76. Wiki Engine
77. Workflow Engines
78. XML
79. XML UI
Java
Java Tutorial
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java Source Code / Java Documentation » Database ORM » SimpleORM » simpleorm.core 
Source Cross Reference  Class Diagram Java Document (Java Doc) 


java.lang.Object
   simpleorm.properties.SPropertyMap
      simpleorm.core.SFieldMeta
         simpleorm.core.SFieldReference

SFieldReference
public class SFieldReference extends SFieldMeta (Code)
Represents a foreign key reference from one record to another. It's initializer also normally generates the implicit foreign key fields.

For example, assume that Employee has a DEPT_ID field that refers to Department.DEPT_ID. The Employee record would normally be declared as follows:-

public class Employee extends SRecordInstance... static final SFieldMeta DEPARTMENT = new SFieldReference(meta, Department.meta); Internally the DEPARTMENT Reference generates one or more Foreign Key fields that correspond to each key fields in Department. In the example above, an implicit Employee.DEPT_ID field would be created. Note that if the key defintion of Department changed then this would be automatically propogated to the Employee record.

It is also possible to declare the foreign key fields explicitly, which enables extra parameters such as column names to be explicitly specified. For example:-

public class Employee extends SRecordInstance... public static final SFieldMeta DEPT_ID = new SFieldString(meta, "DEPT_ID"); static final SFieldMeta DEPARTMENT = new SFieldReference(meta, Department.meta, new SFieldMeta[]{DEPT_ID}, 0); References are also allowed in primary keys of records, these are known as Identifying foreign keys. This means that additional foreign keys would be added recursively. See for examples.

Explicitly storing the foreign key fields means that there is no need to have a Department record instance in order to retrieve an Employee. Only if one calls Employee.getDepartment is the Department record created. It also alows overlapping foreign keys to be supported later (where two References may share a column).

Fields are normally created in static initializers of class constants (although this is not necessary). The java initialization rules generally work well to ensure that referenced records are initialized before referencing records. However, it may occasionally be necessary to create references in a second pass, particularly if there are mutually recursive references.

To understand the underlying data structures you really need to look at the E-R diagram.

E-Mail Extracts:- First of all let me note that the problem that you are dealing with is the mapping what used to be called a conceptual model and the relational/logical model. In the traditional "three schema model" generators work from conceptual through logical to physical models.

Since the advent of OO technology, the words have changed but the problems remain the same. Generating the relational schema from the conceptual one used by SimpleORM is quite fiddly, and is the most complex code in SimpleORM. Going the other way is, in general, much harder -- you are squeezing the toothpaste back into a tube, and not necessarily the same type of tube from whence it came.

However, in your quick start you do not have to solve all problems. Just generate the easy, common cases. Remember that the user can add foreign key definition in their subclass -- there is no reflection. So please focus on the simple, consistent cases.

As Richard implies, it is a fundamental assumtion of SimpleORM that records only contain one Primary key, and that that all foreign keys use it. No candidate keys considered. This is pretty fundamental to the way SimpleORM works -- the cache is keyed by the primary key, only.

So that is why you only need to specify the referencing record, but may in general have to specify all the referencing fields. This is why fields are *not* specified as SFieldReference(SRecordMeta meta, SFieldMeta[] localKeys, SFieldMeta[] foreignKeys)

which is a relational approach. SimpleORM assumes that foreign keys are generally defined in a consistent manner. This produces succinct code. I have not tried to make the processing of inconsistent names elegant because I assume (wrongly?) that it is rare.



Field Summary
 SFieldMeta[]foreignKeyFields
     The direct foreign keys, may not all be scalars.
 Stringprefix
     This is the string prepended to any foreign keys.
 SRecordMetareferencedRecord
     The ultmatiley referenced record whose keys correspond to this reference's foreign keys.

Constructor Summary
public  SFieldReference(SRecordMeta meta, SRecordMeta referenced, String fieldName, SFieldMeta[] foreignKeys, SPropertyValue[] pvals)
     Creates a foreign key reference using foreignKeys to reference referenced.
public  SFieldReference(SRecordMeta meta, SRecordMeta referenced, SFieldMeta[] foreignKeys, SPropertyValue[] pvals)
    
public  SFieldReference(SRecordMeta meta, SFieldReference referenced, String fieldName, SFieldMeta[] foreignKeys, SPropertyValue[] pvals)
     Same as above, but used to reference intermediate foreign keys.
public  SFieldReference(SRecordMeta meta, SFieldReference referenced, SFieldMeta[] foreignKeys, SPropertyValue[] pvals)
    
public  SFieldReference(SRecordMeta meta, SRecordMeta referenced, String prefix, SPropertyValue[] pvals)
     Creates a SFieldReference field to reference referenced.
public  SFieldReference(SRecordMeta meta, SRecordMeta referenced, String prefix, SPropertyValue pval1)
    
public  SFieldReference(SRecordMeta meta, SRecordMeta referenced, String prefix, SPropertyValue pval1, SPropertyValue pval2)
    
public  SFieldReference(SRecordMeta meta, SRecordMeta referenced, String prefix)
    
public  SFieldReference(SRecordMeta meta, SRecordMeta referenced)
     prefix defaults to "", the common case.
public  SFieldReference(SRecordMeta meta, SFieldReference referenced, String prefix, SPropertyValue[] pvals)
     For identifying foreign keys.

Method Summary
 voidcheckUpdatable(SRecordInstance instance)
     This reference is updatable iff all its ground foreign keys are updatable, recursively.
 ObjectconvertToField(Object raw)
    
public  StringcreateColumnSQL()
    
 StringdefaultDataType()
     Specializes SFieldMeta.
public  SFieldMetaforeignKeyField(int index)
     Returns the field definition of the indexth foreign key for this reference.
public  intforeignKeyFieldsSize()
     Number of foreign key fields for this reference.
 ObjectgetRawFieldValue(SRecordInstance instance, long sqy_flags)
     Specializes SFieldMeta.getRawFieldValue, which is called by getFieldValue, thence SRecoredInstance.getObject...
public  SRecordMetagetReferencedRecord()
     Get the SRecordMeta to which this reference points to.
 SFieldMetamakeForeignKey(SRecordMeta rmeta, String prefix, SPropertyValue[] pvals)
     Abstract specializer.
 ObjectqueryFieldValue(ResultSet rs, int sqlIndex)
    
 voidrawSetFieldValue(SRecordInstance instance, Object value)
     Sets the instance reference to value.
public  StringtoLongerString()
    
public  StringtoString()
    

Field Detail
foreignKeyFields
SFieldMeta[] foreignKeyFields(Code)
The direct foreign keys, may not all be scalars. True inverse of SFieldMeta.sFieldReference. Not a flattened structure like SRecordMeta.sFieldMetas. You have to recur to get all the scalar fields in a reference.



prefix
String prefix(Code)
This is the string prepended to any foreign keys. Eg. to distinquish ACTING_DEPT_ID vs PERMANENT_DEPT_ID.



referencedRecord
SRecordMeta referencedRecord(Code)
The ultmatiley referenced record whose keys correspond to this reference's foreign keys. Ie. the end of the chain. Not the same as foreignKeyFields[0].sRecordMeta which is just one level deep. SFieldMeta.referencedKeyField points to correpsonding reference in the foreignKeyFields[0].sRecordMeta record.




Constructor Detail
SFieldReference
public SFieldReference(SRecordMeta meta, SRecordMeta referenced, String fieldName, SFieldMeta[] foreignKeys, SPropertyValue[] pvals)(Code)
Creates a foreign key reference using foreignKeys to reference referenced. The foreignKeys must match the top level primarky keys of referenced exactly in order, type and number. If the primaryKey includes references, then just the reference should be included, not the indirect foreign keys.

This raw initializer is only useful to add extra specifications to the explicit definitions of the foreign key fields. This is rare in practice.




SFieldReference
public SFieldReference(SRecordMeta meta, SRecordMeta referenced, SFieldMeta[] foreignKeys, SPropertyValue[] pvals)(Code)



SFieldReference
public SFieldReference(SRecordMeta meta, SFieldReference referenced, String fieldName, SFieldMeta[] foreignKeys, SPropertyValue[] pvals)(Code)
Same as above, but used to reference intermediate foreign keys.



SFieldReference
public SFieldReference(SRecordMeta meta, SFieldReference referenced, SFieldMeta[] foreignKeys, SPropertyValue[] pvals)(Code)



SFieldReference
public SFieldReference(SRecordMeta meta, SRecordMeta referenced, String prefix, SPropertyValue[] pvals)(Code)
Creates a SFieldReference field to reference referenced. Then creates aditiaonal SFieldMetas that correspond each column of the foreign key. A foreign key may in turn be a reference ("Identifying" foreign key) in which case this process recurs.

Each created foreign key column has the same name and type as the one in the referenced table but the names can be prefixed by prefix which is handy if for example, an Employee had a Managing_Department and a Billing_Department.




SFieldReference
public SFieldReference(SRecordMeta meta, SRecordMeta referenced, String prefix, SPropertyValue pval1)(Code)



SFieldReference
public SFieldReference(SRecordMeta meta, SRecordMeta referenced, String prefix, SPropertyValue pval1, SPropertyValue pval2)(Code)



SFieldReference
public SFieldReference(SRecordMeta meta, SRecordMeta referenced, String prefix)(Code)



SFieldReference
public SFieldReference(SRecordMeta meta, SRecordMeta referenced)(Code)
prefix defaults to "", the common case.



SFieldReference
public SFieldReference(SRecordMeta meta, SFieldReference referenced, String prefix, SPropertyValue[] pvals)(Code)
For identifying foreign keys.




Method Detail
checkUpdatable
void checkUpdatable(SRecordInstance instance)(Code)
This reference is updatable iff all its ground foreign keys are updatable, recursively.



convertToField
Object convertToField(Object raw) throws Exception(Code)



createColumnSQL
public String createColumnSQL()(Code)



defaultDataType
String defaultDataType()(Code)
Specializes SFieldMeta.



foreignKeyField
public SFieldMeta foreignKeyField(int index)(Code)
Returns the field definition of the indexth foreign key for this reference. The first one is 0. This can then be used as a parameter to subsequent get*() methods.

The main use of this function is to access the foreing key values of references without having to actually query the database.

(Note that this purpose will become obsolete once the lazy findOrCreate is implemented because just referencing the key value of the referenced object will not trigger the query.)




foreignKeyFieldsSize
public int foreignKeyFieldsSize()(Code)
Number of foreign key fields for this reference.



getRawFieldValue
Object getRawFieldValue(SRecordInstance instance, long sqy_flags)(Code)
Specializes SFieldMeta.getRawFieldValue, which is called by getFieldValue, thence SRecoredInstance.getObject...

Normally, if the field is null but all the primary key fields are non null then does a findOrCreate() to provide a referenced record. SQY_REFERENCE_NO_QUERY suppresses this query. getReferencedWhileDetached may be called for detached records.




getReferencedRecord
public SRecordMeta getReferencedRecord()(Code)
Get the SRecordMeta to which this reference points to. Will not attempt to retrieve the record from the database, will return null if not in memory.



makeForeignKey
SFieldMeta makeForeignKey(SRecordMeta rmeta, String prefix, SPropertyValue[] pvals)(Code)
Abstract specializer. Clone this key field to be a foreign key to rmeta of the same type as this.



queryFieldValue
Object queryFieldValue(ResultSet rs, int sqlIndex)(Code)



rawSetFieldValue
void rawSetFieldValue(SRecordInstance instance, Object value)(Code)
Sets the instance reference to value. Then recursively copies all of the foreign keys. this must be a top level foreign key. (value could be null.)



toLongerString
public String toLongerString()(Code)



toString
public String toString()(Code)



Fields inherited from simpleorm.core.SFieldMeta
int fieldIndex(Code)(Java Doc)
transient boolean isPrimaryKey(Code)(Java Doc)
transient boolean isReadOnly(Code)(Java Doc)
transient SFieldMeta referencedKeyField(Code)(Java Doc)
transient SFieldReference sFieldReference(Code)(Java Doc)
SRecordMeta sRecordMeta(Code)(Java Doc)

Methods inherited from simpleorm.core.SFieldMeta
void checkUpdatable(SRecordInstance instance)(Code)(Java Doc)
abstract Object convertToField(Object raw) throws Exception(Code)(Java Doc)
abstract String defaultDataType()(Code)(Java Doc)
Object getFieldValue(SRecordInstance instance, long sqy_flags)(Code)(Java Doc)
Object getRawFieldValue(SRecordInstance instance, long sqy_flags)(Code)(Java Doc)
public SRecordMeta getSRecordMeta()(Code)(Java Doc)
abstract SFieldMeta makeForeignKey(SRecordMeta rmeta, String prefix, SPropertyValue[] pvals)(Code)(Java Doc)
synchronized long nextGeneratedValue(long minimum)(Code)(Java Doc)
abstract Object queryFieldValue(ResultSet rs, int sqlIndex) throws Exception(Code)(Java Doc)
void rawSetFieldValue(SRecordInstance instance, Object value)(Code)(Java Doc)
protected Object readResolve() throws ObjectStreamException(Code)(Java Doc)
void setFieldValue(SRecordInstance instance, Object rawValue)(Code)(Java Doc)
public String toLongerString()(Code)(Java Doc)
public String toString()(Code)(Java Doc)
void writeFieldValue(PreparedStatement ps, int sqlIndex, Object value)(Code)(Java Doc)
Object writeFieldValue(Object value)(Code)(Java Doc)

Methods inherited from simpleorm.properties.SPropertyMap
public boolean getBoolean(SProperty prop)(Code)(Java Doc)
public Object getProperty(SProperty prop)(Code)(Java Doc)
public String getString(SProperty prop)(Code)(Java Doc)
public Object putDefaultProperty(SProperty prop, Object value)(Code)(Java Doc)
public void putProperty(SProperty prop, Object value)(Code)(Java Doc)
public void remove(SProperty prop)(Code)(Java Doc)
public void setPropertyValue(SPropertyValue pval)(Code)(Java Doc)
public void setPropertyValues(SPropertyValue[] pvals)(Code)(Java Doc)

Methods inherited from java.lang.Object
native protected Object clone() throws CloneNotSupportedException(Code)(Java Doc)
public boolean equals(Object obj)(Code)(Java Doc)
protected void finalize() throws Throwable(Code)(Java Doc)
final native public Class getClass()(Code)(Java Doc)
native public int hashCode()(Code)(Java Doc)
final native public void notify()(Code)(Java Doc)
final native public void notifyAll()(Code)(Java Doc)
public String toString()(Code)(Java Doc)
final native public void wait(long timeout) throws InterruptedException(Code)(Java Doc)
final public void wait(long timeout, int nanos) throws InterruptedException(Code)(Java Doc)
final public void wait() throws InterruptedException(Code)(Java Doc)

www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.