]
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: