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

Tim McConnell reassigned OPENJPA-510:
-------------------------------------

    Assignee: Tim McConnell

> ReverseMappingTool generates incorrect SQL for PostgreSQL if -fk = true
> -----------------------------------------------------------------------
>
>                 Key: OPENJPA-510
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-510
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jdbc
>    Affects Versions: 1.1.0
>         Environment: PostgreSQL
>            Reporter: Michael Dick
>            Assignee: Tim McConnell
>
> Opening on behalf of Tim Holloway per email to the OpenJPA mailing list. 
> Synopsis: Invalid code is generated when internally-generated foreign
> key names are used and the ReverseMappingTool is run with the "-fk"
> option set to true.
> Description: If a constraint name is not explicitly defined, PostgreSQL
> v7 synthesizes constraint names in the form "$n", where n is numeric,
> viz:
>                      Table "public.bus_stops"
>      Column       |         Type          |       Modifiers
> -------------------+-----------------------+------------------------
>  stop_id           | integer               | not null
>  street1_name      | character varying(32) | not null
>  street1_qualifier | character varying(11) |
>  street1_block     | integer               |
>  street2_name      | character varying(32) |
>  street2_qualifier | character varying(11) |
>  street2_block     | integer               |
>  longitude         | numeric(16,8)         | not null default 0.0
>  latitude          | numeric(16,8)         | not null default 0.0
>  elevation         | numeric(16,8)         | not null default 0.0
>  description       | text                  |
>  sheltered         | boolean               | not null default false
>  inbound           | boolean               | not null
>  street1_type      | character varying(8)  | not null
>  street2_type      | character varying(8)  | not null
>  street1_direction | character varying(5)  | not null
>  street2_direction | character varying(5)  | not null
> Indexes:
>    "stop2_pkey" primary key, btree (stop_id)
> Foreign-key constraints:
>    "$1" FOREIGN KEY (street1_direction) REFERENCES
> lk_street_directions(street_direction_id)
>    "$2" FOREIGN KEY (street2_direction) REFERENCES
> lk_street_directions(street_direction_id)
>    "fk_bus_stops_street1_type" FOREIGN KEY (street1_type) REFERENCES
> lk_street_types(street_type_id)
>    "fk_bus_stops_street2_type" FOREIGN KEY (street2_type) REFERENCES
> lk_street_types(street_type_id)
> Consequences: Note the generated code for synthesized and explicit
> constraint names:
> /**
>  * Auto-generated by:
>  * org.apache.openjpa.jdbc.meta.ReverseMappingTool
> $AnnotatedCodeGenerator
>  */
> @Entity
> @Table(schema="public", name="bus_stops")
> public class BusStops {
>        @ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.MERGE)
>        @JoinColumn(name="street1_direction", nullable=false)
>        private LkStreetDirections 1; //<==== WRONG
>        @OneToMany(targetEntity=com.mousetech.jta.persist.TripStops.class,
> mappedBy="1", cascade=CascadeType.MERGE)
>         //VVVVV WRONG VVVV
>        private Set<TripStops> 1Inverses = new HashSet<TripStops>();
>        @ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.MERGE)
>        @JoinColumn(name="street2_direction", nullable=false)
>        private LkStreetDirections 2; //<==== WRONG
>        @OneToMany(targetEntity=com.mousetech.jta.persist.RouteStops.class,
> mappedBy="2", cascade=CascadeType.MERGE)
>         //VVVVV WRONG VVVV
>        private Set<RouteStops> 22Inverses = new HashSet<RouteStops>();
>        @Basic
>        @Column(columnDefinition="text", length=2147483647)
>        private String description;
>        @Basic
>        private double elevation;
>        @ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.MERGE)
>        @JoinColumn(name="street1_type", nullable=false)
>        private LkStreetTypes fkBusStopsStreet1Type;  //<==== CORRECT
>        @ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.MERGE)
>        @JoinColumn(name="street2_type", nullable=false)
>        private LkStreetTypes fkBusStopsStreet2Type;  //<==== CORRECT
> (remainder of code omitted as immaterial).

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

Reply via email to