is this a bug in EJB?
mnrz Sep 22, 2007 6:45 AMhello
I have some entity in my application, when I declare a method starting with term "is" the database will be updated with a new field whereas I didn't declare that field as a database field
here is an example:
import static org.jboss.seam.ScopeType.SESSION; import java.io.Serializable; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import org.hibernate.validator.NotNull; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; @Entity @Table(name ="group_permission") @Name("group") @Scope(SESSION) public class Group implements Serializable{ private String name; private Long id; private Integer permissionGroup = new Integer(0); private Set<Permission> permissions =new HashSet<Permission>(); private static final int Export_Permission = 8; private static final String All_Permission = "*"; @OneToMany(mappedBy="group", fetch = FetchType.EAGER ,cascade=CascadeType.ALL ) public Set<Permission> getPermissions() { return permissions; } public void setPermissions(Set<Permission> permissions) { this.permissions = permissions; } @Id @GeneratedValue @Column(name = "id") public Long getId() { return id; } public void setId(Long id) { this.id = id; } @NotNull @Column(name="name") public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean equals(Object o) { if (o == null) return false; if (!(o instanceof Group)) return false; Group that = (Group) o; return this.getName().equals(that.getName()); } public int hashCode() { return this.getName().hashCode()+720; } @Column(name="permissionGroup") public Integer getPermissionGroup() { return permissionGroup; } public void setPermissionGroup(Integer permissionGroup) { this.permissionGroup = permissionGroup; } public void setPermission(boolean permission){ permissionGroup=0; if(permission){ permissionGroup=permissionGroup | Export_Permission; } } public void addPermission(ColumnHeader ch ,String categoryName){ if(permissions==null){ permissions=new HashSet<Permission>(); } if(ch.isDisplayable() ||ch.isSearchable()){ Permission permission=new Permission(); permission.setGroup(this); permission.setCategory(categoryName); permission.displayablePermission(ch.isDisplayable()); permission.searchablePermission(ch.isSearchable()); permission.setFieldName(ch.getName()); permissions.add(permission); } } public boolean hasExportPermission(){ if((Export_Permission & Export_Permission) == Export_Permission) return true; else return false; } public void setExportPermission(boolean export){ if(export) { permissionGroup = permissionGroup | Export_Permission; }else { permissionGroup = permissionGroup & ~Export_Permission; } } public boolean hasDisplayPermission(String categoryName, String fieldName) { for(Permission p: permissions) { if(p.getCategory().trim().equals(All_Permission)){ return true; } if(p.getCategory().equals(categoryName) && p.getFieldName().equals(fieldName)) { return p.hasDisplayablePermission(); } } return false; } public boolean hasSearchPermission(String categoryName, String fieldName) { for(Permission p: permissions) { if(p.getCategory().equals(All_Permission)){ return true; } if(p.getCategory().equals(categoryName) && p.getFieldName().equals(fieldName)) { return p.hasSearchablePermission(); } } return false; } }
as you can see in above code represented in blue color, I have some utility method in my entity, if I rename the method hasExportPermission() to isExportPermission() the EJB will create a field in corresponding table with name exportPermission and because it returns boolean the type of the field will be tinyint(1) (using mySql)
I expect since I didn't declare it by annotations it shouldn't consider it as a table field, but it does!!!!
I want to know whether this is a bug or I made a mistake somewhere
it is remarkable to say that I am using JBoss Seam framework, but I don't think this is its fault.
thank you very much