[jira] Assigned: (CAY-457) Cayenne Naming and Sequence Generator Configuration

From: Andrey Razumovsky (JIRA) ("Andrey)
Date: Wed Oct 01 2008 - 03:27:11 EDT

  • Next message: Andrey Razumovsky (JIRA): "[jira] Assigned: (CAY-402) Entity/Attribute/Relationship naming improvements on rverse-engineering"

         [ https://issues.apache.org/cayenne/browse/CAY-457?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

    Andrey Razumovsky reassigned CAY-457:
    -------------------------------------

        Assignee: Andrey Razumovsky

    > Cayenne Naming and Sequence Generator Configuration
    > ---------------------------------------------------
    >
    > Key: CAY-457
    > URL: https://issues.apache.org/cayenne/browse/CAY-457
    > Project: Cayenne
    > Issue Type: New Feature
    > Components: Cayenne Core Library
    > Affects Versions: 1.2 [STABLE]
    > Reporter: Heiko Erhardt
    > Assignee: Andrey Razumovsky
    > Attachments: cay-457-fullpatch-src.txt, Patch.zip
    >
    >
    > Here is an excerpt from the feature descritpion of the Cayenne xdocs file.
    > I felt this becomes important when reengineering databases or creating new objects in the Modeler, so I placed it in the Modeler guide though the implementation resides in the Cayenne core.
    > I couldn't place it in the Wiki because the common-tasks-section has not been entered there yet.
    > Heiko Erhardt
    > ----
    > When reverse engineering a database or synchronizing object
    > entities with database entities, Cayenne applies various
    > rules for converting database names to object, member and
    > relationship names. Also, a sequence generator definition may be
    > created automatically for each reverse-engineered database entitiy.
    > The file cayenne-naming.properties in the .cayenne directory
    > in the classpath allows for customizing the behavior of
    > the Cayenne modeler and the database loader to some extent.
    > The .cayenne/cayenne-naming.properties will be searched
    > in the classpath. Just like the cayenne-log.properties file,
    > You may copy the file from within the cayenne.jar archive and
    > place it into an archive or folder that will be prepended
    > to the classpath. Cayenne will read the contents of this
    > file only once, so note that you must restart the Cayenne
    > modeler if you change the file's contents.
    > Strategies.
    > The naming algorithm is implemented
    > using the strategy pattern, which allows you to plug in your
    > own naming implementations. The naming strategy must implement
    > the org.objectstyle.cayenne.util.NamingStrategy
    > interface and can extend from the default naming strategy
    > org.objectstyle.cayenne.util.DefaultNamingStrategy class.
    > You may specify the strategy class name in the cayenne-naming.properties
    > file.
    > Likewise, a key generator strategy may be specified.
    > It must implement org.objectstyle.cayenne.access.DbLoaderKeyGeneratorStrategy
    > and may extend from DbLoaderPropertyBasedKeyGeneratorStrategy.
    > Name Conversion.
    > In general, names of
    > object entities or object members are generated by converting
    > the underscore-based database names to proper Java names.
    > This behaviour is hard-coded at the moment.
    > However, before this conversion is performed, some modifications
    > may be applied.
    > Entity Naming.
    > Sometimes, database tables are named
    > in a plural form whereas Java class names reflect the singular form
    > if a term. If your set the <code>Naming.SingularizeObjEntities</code>
    > property to true, the database entity name will be converted to its
    > singular form by stripping the traling "s". For exceptions to this rule
    > where this simple operation won't do (e. g. "ADDRESSES"), you may specify
    > the singular form of the entity using the <code>Naming.Singular.</code>
    > property prefix (e. g. <code>Naming.Singular.ADDRESSES=ADDRESS</code>).
    > object entities or object members are generated by converting
    > the underscore-based database names to proper Java names.
    > This behaviour is hard-coded at the moment.
    > However, before this conversion is performed, some modifications
    > may be applied.
    > Attribute Naming.
    > It may be desirable to remove an auto-generated
    > prefix from database column names before converting the to Java member names
    > in order to generate object property names. The <code>Naming.DbAttributeNamePrefixToRemove</code>
    > property supports this. If specified, any text up to (and including) the
    > specified prefix will be removed. For example, some database design tools
    > automatically add a table-specific prefix to all column names of the table
    > like "PERS_FIRST_NAME". The property entry
    > <code>Naming.DbAttributeNamePrefixToRemove=_</code>
    > will remove everything up to the first underscore, leaving "FIRST_NAME"
    > for generating the object attribute name.
    > Relationship Naming.
    > The relationship naming controls
    > the names of the generated relationship getter, setter, addition and removal
    > methods of a data object class.
    > The default naming strategy of the cayenne-naming.properties file supports specifying
    > prefixes and postfixes for to-one and to-many relations. By default, to-one
    > relations will be prefixed by "TO_", resuling in the method prefix "to" (e. g. a
    > relation to the "PAINTING" entity will result in a "setToPainting" setter method.
    > To-many relations will have the postfix "_ARRAY", resuling in "addToPaintingArray"
    > adder methods.
    > Setting for example
    > <code>Naming.ToOneRelationPrefix=</code>
    > and
    > <code>Naming.ToManyRelationSuffix=_LIST</code>
    > will remove the "to" prefix from to-one relations and change the to-many postfix to "List".
    > The <code>org.objectstyle.cayenne.util.RelationsshipFkNamingStrategy</code> naming strategy
    > extends the default naming strategy. It will add the name of the foreign key of a relationship
    > before the target entity name to the relationsship name. This has two advantages:
    > 1. Relations between the same entities (e. g. two relations between entity A and entity B)
    > will have a speaking difference instead of merely a running number appended in order to
    > make the unique (e. g. "goodPainting" and "badPainting" instead of "painting" and "painting1").
    > 2. It might be more descriptive than just using the target entity name.
    > Similar to <code>Naming.DbAttributeNamePrefixToRemove</code>, the
    > Similar to <code>Naming.Relationship.AttrNamePrefixToRemove</code> allows to remove
    > a prefix from the foreign key before applying it to the name conversion.
    > For example, for foreign keys like "PAINTING_ID_GOOD", the property entry
    > <code>Naming.Relationship.AttrNamePrefixToRemove=_ID_</code> will leave the "GOOD"
    > text for relationship name generation, resulting in a method name like
    > "setGoodPainting".
    > Key Generator Settings.
    > As with Cayenne object naming, a key generator
    > definition can be bound to each reverse-engineered database entity using a pluggable
    > strategy class, which must implement the
    > org.objectstyle.cayenne.access.DbLoaderKeyGeneratorStrategy interface.
    > The default implementation is the
    > org.objectstyle.cayenne.access.DbLoaderPropertyBasedKeyGeneratorStrategy class.
    > The properties of the cayenne-naming.properties file allow to specify
    > the generator type, key cache size and the name of the generator (i. e. the name
    > of the sequence). It may be generated from the table name or the entire name or a prefix of
    > the key attribute.

    -- 
    This message is automatically generated by JIRA.
    -
    You can reply to this email to add a comment to the issue online.
    



    This archive was generated by hypermail 2.0.0 : Wed Oct 01 2008 - 03:27:37 EDT