[jbossseam-issues] [JBoss JIRA] Commented: (JBSEAM-994) seam-gen and mutiple foreign keys
Pierre Raoul (JIRA)
jira-events at lists.jboss.org
Mon Jun 4 19:45:08 EDT 2007
[ http://jira.jboss.com/jira/browse/JBSEAM-994?page=comments#action_12364158 ]
Pierre Raoul commented on JBSEAM-994:
-------------------------------------
I never hoped the patch would be accepted as it is. I'm ready to rework it (them!). I just want some advice before I resume.
About "unrelated changes", is it ok with this list:
- seam-gen/resources/messages_en.properties (new Jira issue): add missing equal signs
- seam-gen/view.*.ftl (new Jira issue): close with "/>" the "assign" tags without body and the "include" ones. Then the freemarker editor can checked if all the freemarker tags are balanced.
- seam-gen/view/params.xml.ftl (new JIRA issue): "assign" defines always a global variable, so "parentPojo" backup is useless. In fact it works as it is only because there is no other "assign" after the include of params.xml.ftl in the file. Patch: define a macro, then even with instructions after the include, it will work.
- Generate application from existing entities (JBSEAM-843): no news since the 30/03/07 (patch from Max Anderson about jpaconfiguration in seam-gen/build.xml and patches from me about tests to detect java class in freemarker files)
- Seam-gen and multiple foreign keys (JBSEAM-994): deal here only with the ManyToOne associations.
- In a entity, two or more attributes with collection of the same entity as type (new Jira issue): same kind of issue than above but with OneToMany associations.
- Backward link between pages of different entities (new Jira issue): atm, save/select/done/cancel commands on a page always return to default page i.e. either list or view page of the same entity. It should be possible to return to the calling page.
About tomahawk: I was quite aware you won't accepted it. There are three options here:
- use only EL expressions: should be possible here, even if ugly
- add specific functions to EntityHome.java and EntityList.java: should be possible now that paramaters are ok in value expressions
- clone t:buffer
I have no real preference...
About other issues with my patch (at least other than unrelated changes), can you be more specific?
> seam-gen and mutiple foreign keys
> ---------------------------------
>
> Key: JBSEAM-994
> URL: http://jira.jboss.com/jira/browse/JBSEAM-994
> Project: JBoss Seam
> Issue Type: Bug
> Components: Tools
> Affects Versions: 1.2.0.GA
> Environment: JBoss-4.0.5
> Reporter: Niels Hoogeveen
> Attachments: EntityHome.java.ftl.patch, seam-gen.diff, seam-gen.zip
>
>
> I have generated a project with seam-gen based on generate-entities. All works fine, except for the generation of the home interfaces. In one of my tables I have two foreign keys to the same table. In the home interface two references are created to the appropriate object, but with the same name (which of course doesn't compile).
> Here is a simplified example:
> Table 1
> Code:
> CREATE TABLE test
> (
> id int4 NOT NULL DEFAULT nextval('test_id_seq'::regclass),
> name varchar,
> id_test2_1 int4,
> id_test2_2 int4,
> CONSTRAINT test_pkey PRIMARY KEY (id),
> CONSTRAINT test_id_test2_1_fkey FOREIGN KEY (id_test2_1)
> REFERENCES test2 (id) MATCH SIMPLE
> ON UPDATE NO ACTION ON DELETE NO ACTION,
> CONSTRAINT test_id_test2_2_fkey FOREIGN KEY (id_test2_2)
> REFERENCES test2 (id) MATCH SIMPLE
> ON UPDATE NO ACTION ON DELETE NO ACTION
> )
>
> Table2
> Code:
> CREATE TABLE test2
> (
> id int4 NOT NULL DEFAULT nextval('test2_id_seq'::regclass),
> name varchar,
> CONSTRAINT test2_pkey PRIMARY KEY (id)
> )
>
> First Entity
> Code:
> @Entity
> @Table(name = "test", schema = "public")
> public class Test implements java.io.Serializable {
> private int id;
> private Test2 test2ByIdTest22;
> private Test2 test2ByIdTest21;
> private String name;
> public Test() {
> }
> public Test(int id) {
> this.id = id;
> }
> public Test(int id, Test2 test2ByIdTest22, Test2 test2ByIdTest21,
> String name) {
> this.id = id;
> this.test2ByIdTest22 = test2ByIdTest22;
> this.test2ByIdTest21 = test2ByIdTest21;
> this.name = name;
> }
> @Id
> @Column(name = "id", unique = true, nullable = false)
> @NotNull
> public int getId() {
> return this.id;
> }
> public void setId(int id) {
> this.id = id;
> }
> @ManyToOne(fetch = FetchType.LAZY)
> @JoinColumn(name = "id_test2_2")
> public Test2 getTest2ByIdTest22() {
> return this.test2ByIdTest22;
> }
> public void setTest2ByIdTest22(Test2 test2ByIdTest22) {
> this.test2ByIdTest22 = test2ByIdTest22;
> }
> @ManyToOne(fetch = FetchType.LAZY)
> @JoinColumn(name = "id_test2_1")
> public Test2 getTest2ByIdTest21() {
> return this.test2ByIdTest21;
> }
> public void setTest2ByIdTest21(Test2 test2ByIdTest21) {
> this.test2ByIdTest21 = test2ByIdTest21;
> }
> @Column(name = "name", length = 0)
> @Length(max = 0)
> public String getName() {
> return this.name;
> }
> public void setName(String name) {
> this.name = name;
> }
> }
>
> second entity
> Code:
> @Entity
> @Table(name = "test2", schema = "public")
> public class Test2 implements java.io.Serializable {
> private int id;
> private String name;
> private Set<Test> testsForIdTest21 = new HashSet<Test>(0);
> private Set<Test> testsForIdTest22 = new HashSet<Test>(0);
> public Test2() {
> }
> public Test2(int id) {
> this.id = id;
> }
> public Test2(int id, String name, Set<Test> testsForIdTest21,
> Set<Test> testsForIdTest22) {
> this.id = id;
> this.name = name;
> this.testsForIdTest21 = testsForIdTest21;
> this.testsForIdTest22 = testsForIdTest22;
> }
> @Id
> @Column(name = "id", unique = true, nullable = false)
> @NotNull
> public int getId() {
> return this.id;
> }
> public void setId(int id) {
> this.id = id;
> }
> @Column(name = "name", length = 0)
> @Length(max = 0)
> public String getName() {
> return this.name;
> }
> public void setName(String name) {
> this.name = name;
> }
> @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "test2ByIdTest21")
> public Set<Test> getTestsForIdTest21() {
> return this.testsForIdTest21;
> }
> public void setTestsForIdTest21(Set<Test> testsForIdTest21) {
> this.testsForIdTest21 = testsForIdTest21;
> }
> @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "test2ByIdTest22")
> public Set<Test> getTestsForIdTest22() {
> return this.testsForIdTest22;
> }
> public void setTestsForIdTest22(Set<Test> testsForIdTest22) {
> this.testsForIdTest22 = testsForIdTest22;
> }
> }
>
> Home interface of first entity. Here we have two Test2Home references, both with the name test2Home.
> Code:
> @Name("testHome")
> public class TestHome extends EntityHome<Test> {
> @In(create = true)
> Test2Home test2Home;
> @In(create = true)
> Test2Home test2Home;
> public void setTestId(Integer id) {
> setId(id);
> }
> public Integer getTestId() {
> return (Integer) getId();
> }
> @Override
> protected Test createInstance() {
> Test test = new Test();
> return test;
> }
> public void wire() {
> Test2 test2ByIdTest22 = test2Home.getDefinedInstance();
> if (test2ByIdTest22 != null) {
> getInstance().setTest2ByIdTest22(test2ByIdTest22);
> }
> Test2 test2ByIdTest21 = test2Home.getDefinedInstance();
> if (test2ByIdTest21 != null) {
> getInstance().setTest2ByIdTest21(test2ByIdTest21);
> }
> }
> public boolean isWired() {
> return true;
> }
> public Test getDefinedInstance() {
> return isIdDefined() ? getInstance() : null;
> }
> }
>
> BTW. I used the latest seam version from CVS.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the seam-issues
mailing list