Re: Enums

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Mon Aug 13 2007 - 11:07:04 EDT

  • Next message: Mike Kienenberger: "Re: Enums"

    My point was that Java 1.5 enums do address that "natively" in the
    Java code, so mapping in the Modeler is redundant.

    Andrus

    On Aug 13, 2007, at 10:54 AM, Mike Kienenberger wrote:
    > I admit that I don't quite understand everything that's going on here
    > since I haven't had the opportunity to use java 1.5 enumerations yet,
    > but I can certainly see how being able to define database enumerations
    > in the data model and then generating java constants or enumerations
    > for them would be a useful feature.
    >
    > I'd make use of such a feature if it were available in the modeler.
    > I have a large number of "*_TYPE" tables that contain data that's
    > essentially enumerations, and under Java 1.4, I manually add constants
    > to my non-generated DataObject classes to represent this.
    >
    > On 8/12/07, Andrus Adamchik <andru..bjectstyle.org> wrote:
    >> I am reluctant to add a standard option for persisting of what can be
    >> considered a custom class. But I am not sure why this is even needed?
    >> You can code your enums as Java enums with custom properties, and do
    >> not use Cayenne-provided EnumExtendedType, installing your own
    >> instead. E.g.:
    >>
    >>
    >> public enum Color {
    >>
    >> BLACK("000000"), WHITE("FFFFFF");
    >>
    >> private final String dbCode;
    >>
    >> private Color(String dbCode) {
    >> this.dbCode = dbCode;
    >> }
    >>
    >> public String getDbCode() {
    >> return dbCode;
    >> }
    >> }
    >>
    >> public class ColorType implements ExtendedType {
    >>
    >> public String getClassName() {
    >> return Color.class.getName();
    >> }
    >>
    >> public void setJdbcObject(
    >> PreparedStatement statement,
    >> Object value,
    >> int pos,
    >> int type,
    >> int precision) throws Exception {
    >>
    >> if (value instanceof MyEnumType) {
    >>
    >> Color e = (Color) value;
    >> statement.setString(pos, e.getDbCode());
    >> }
    >> else {
    >> statement.setNull(pos, type);
    >> }
    >> }
    >> ....
    >> }
    >>
    >>
    >>
    >>
    >>
    >> On Aug 9, 2007, at 1:42 PM, Michael Gentry wrote:
    >>
    >>> Uhm ... that's why I wanted it in the modeler and supported by
    >>> Cayenne
    >>> natively. (Or easier to support, even if not in the modeler.)
    >>>
    >>> :-)
    >>>
    >>> I'm positive this feature would be useful to others. My current
    >>> approach is complicated to set up and easy to miss registering
    >>> one of
    >>> your types (although you blow up quickly enough) or an actual
    >>> enumerated value (which is harder to catch). If it could be
    >>> simplified, it could be much more useful to everyone.
    >>>
    >>> Thanks,
    >>>
    >>> /dev/mrg
    >>>
    >>>
    >>> On 8/9/07, Andrus Adamchik <andru..bjectstyle.org> wrote:
    >>>> I see what you are saying. I guess for your case you can keep using
    >>>> custom ExtendedType (only based on JDK 1.5 enums).
    >>>>
    >>>> Andrus
    >>>
    >>
    >>
    >



    This archive was generated by hypermail 2.0.0 : Mon Aug 13 2007 - 11:07:20 EDT