Issue Details (XML | Word | Printable)

Key: APF-792
Type: Bug Bug
Status: Resolved Resolved
Resolution: Won't Fix
Priority: Major Major
Assignee: Matt Raible
Reporter: Marc Schipperheyn
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
AppFuse

appfuse:gen class name used in stead of package name+class name?

Created: 03/Jun/07 11:53 AM   Updated: 08/Oct/07 01:05 PM   Resolved: 08/Oct/07 01:05 PM
Component/s: Tools - AppGen
Affects Version/s: 2.0-M5
Fix Version/s: 2.0 Final


 Description  « Hide
When you define a class mypackagename.User and use mvn appfuse:gen you will get the following error "Use of the same entity name twice: User".
org.hibernate.AnnotationException: Use of the same entity name twice: User
        at org.hibernate.cfg.annotations.EntityBinder.bindEntity(EntityBinder.ja
va:221)
        at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:53
1)
        at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(Anno
tationConfiguration.java:452)
        at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(Annotatio
nConfiguration.java:268)
        at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1039
)
        at org.codehaus.mojo.hibernate3.configuration.AbstractComponentConfigura
tion.getConfiguration(AbstractComponentConfiguration.java:38)
        at org.appfuse.mojo.HibernateExporterMojo.configureExporter(HibernateExp
orterMojo.java:196)
        at org.appfuse.mojo.exporter.AppFuseGeneratorMojo.configureExporter(AppF
useGeneratorMojo.java:109)
        at org.appfuse.mojo.HibernateExporterMojo.doExecute(HibernateExporterMoj
o.java:244)
        at org.appfuse.mojo.HibernateExporterMojo.execute(HibernateExporterMojo.
java:154)
        at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPlugi
nManager.java:443)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(Defa
ultLifecycleExecutor.java:539)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandalone
Goal(DefaultLifecycleExecutor.java:493)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(Defau
ltLifecycleExecutor.java:463)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHan
dleFailures(DefaultLifecycleExecutor.java:311)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegmen
ts(DefaultLifecycleExecutor.java:278)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLi
fecycleExecutor.java:143)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:334)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:125)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:272)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
        at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
        at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)

        at org.codehaus.classworlds.Launcher.main(Launcher.java:375)

If I change the class name to something else, e.g. Person, it works.
My files are:

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <mapping class="org.appfuse.model.User"/>
        <mapping class="org.appfuse.model.Role"/>
        <mapping class="nl.msw.dates43.model.Person"/>
    </session-factory>
</hibernate-configuration>

package nl.msw.dates43.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.appfuse.model.BaseObject;

@Entity
public class Person extends BaseObject {
private String firstName, lastName, middleName, username, password, email;
private Long id;

@Id
@Column(name="userID")
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

@Column(nullable = false, length = 30)
public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

@Column(nullable = false, length = 50)
public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

@Column(length = 30)
public String getMiddleName() {
return middleName;

}

public void setMiddleName(String middleName) {
this.middleName = middleName;
}

@Column(nullable = false, length = 30)
public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

@Column(nullable = false, length = 15)
public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

@Column(nullable = false, length = 30)
public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String toString() {
return username;
}

public boolean equals(Object that) {
if (this.toString().equals(that.toString()))
return true;
return false;
}

public int hashCode() {
return username.hashCode();
}

}


Matt Raible added a comment - 08/Oct/07 01:05 PM
This is something that Hibernate does, not AppFuse. I believe you can use @Entity (name="User2") to workaround having two classes with the same name in your hibernate.cfg.xml or persistence.xml file.

Matt Raible made changes - 08/Oct/07 01:05 PM
Field Original Value New Value
Status Open [ 1 ] Resolved [ 5 ]
Fix Version/s 2.0 Final [ 10113 ]
Resolution Won't Fix [ 2 ]