Hi!
I hava two classes that have the following structure:
| @Entity
| @SequenceGenerator(name = "crawlerdocument_sequence", sequenceName =
"crawlerdocument_id_seq")
| @Inheritance(strategy = InheritanceType.JOINED)
| public abstract class CrawlerDocument implements Serializable {
|
| //The states a document can have in the DB
| /**
| * This state transcribes the normal state of a document
| */
| public static final int IDLE = 0;
| /**
| * This state transcribes that the document is being crawled/indexed
| */
| public static final int UPDATING_REPOSITORY = 1;
| /**
| * This state transcribes the document has been updated in the
filesystem
| */
| public static final int UPDATED = 2;
| /**
| * This state transcribes the document has not been changed in the file
system
| */
| public static final int NOT_CHANGED = 3;
| /**
| * This state transcribes the document has been created int he file
system
| */
| public static final int INSERTED = 4;
|
| protected Permissions permissions;
|
| protected Repository repository;
|
| private int state;
|
| private Long id;
|
| public CrawlerDocument(){}
|
| @Id
| @GeneratedValue(strategy = GenerationType.SEQUENCE, generator =
"crawlerdocument_sequence")
| public Long getId() {
| return id;
| }
|
| @Column(length = 2700)
| public Permissions getPermissions(){
| return this.permissions;
| }
|
| public void setPermissions(Permissions permissions){
| this.permissions = permissions;
| }
|
|
| @ManyToOne(targetEntity = Repository.class , optional=false,fetch =
FetchType.EAGER)
| public Repository getRepository(){
| return this.repository;
| }
|
| public void setRepository(Repository repository){
| this.repository = repository;
| }
|
| public void setState(int state){
| this.state = state;
| }
|
| public int getState(){
| return this.state;
| }
|
| public void setId(Long id) {
| this.id = id;
| }
| }
|
A another class that extends this class:
| @Entity
| @IdClass(FileSystemCrawlerDocumentPK.class)
| public class FileSystemCrawlerDocument extends CrawlerDocument{
|
| private static final long serialVersionUID = 4457330551129440853L;
|
| private String fullPath;
| private String rootPath;
| private String fileName;
| private String repositoryRelativePath;
| private Date lastChanged;
|
| public FileSystemCrawlerDocument(){}
|
| /**
| * Contructor to be used only for directories, though they are not
saved we can process
| * the path in order to keep the part after the root path
| * @param fullPath
| * @param rootPath
| */
| public FileSystemCrawlerDocument(String fullPath,String rootPath){
| this.fullPath = fullPath;
| this.rootPath = rootPath;
| this.repositoryRelativePath = fullPath.substring(rootPath.length());
| this.permissions = new Permissions();
| }
|
| /**
| * Contructor to be used for the processed files these inherit both the
permissions
| * and the relative path of the parent directory
| * @param parent
| * @param fileName
| */
| public FileSystemCrawlerDocument(FileSystemCrawlerDocument parent,
String fileName){
| this.fileName = fileName;
| this.repositoryRelativePath = parent.getRepositoryRelativePath();
| this.permissions = parent.getPermissions();
| }
|
| @Transient
| public String getFullPath() {
| return fullPath;
| }
|
| public void setFullPath(String fullPath) {
| this.fullPath = fullPath;
| }
|
| @Transient
| public String getRootPath() {
| return rootPath;
| }
|
| public void setRootPath(String rootPath) {
| this.rootPath = rootPath;
| }
|
| @Id
| @Column(length = 1500)
| public String getFileName() {
| return fileName;
| }
|
| public void setFileName(String fileName) {
| this.fileName = fileName;
| }
|
| @Id
| @Column(length = 2700)
| public String getRepositoryRelativePath() {
| return repositoryRelativePath;
| }
|
| public void setRepositoryRelativePath(String repositoryRelativePath) {
| this.repositoryRelativePath = repositoryRelativePath;
| }
|
|
| public String toString() {
| return "FileSystemCrawlerDocument{" +
| "fullPath='" + fullPath + '\'' +
| ", rootPath='" + rootPath + '\'' +
| ", fileName='" + fileName + '\'' +
| ", repositoryRelativePath='" + repositoryRelativePath +
'\'' +
| ", repository=" + repository +
| ", permissions=" + permissions +
| '}';
| }
|
| @Temporal(TemporalType.TIMESTAMP)
| public Date getLastChanged() {
| return lastChanged;
| }
|
| public void setLastChanged(Date lastChanged) {
| this.lastChanged = lastChanged;
| }
| }
|
This second class uses the following id class:
| public class FileSystemCrawlerDocumentPK implements Serializable {
|
| private String fileName;
| private String repositoryRelativePath;
|
| public String getFileName() {
| return fileName;
| }
|
| public void setFileName(String fileName) {
| this.fileName = fileName;
| }
|
| public String getRepositoryRelativePath() {
| return repositoryRelativePath;
| }
|
| public void setRepositoryRelativePath(String repositoryRelativePath) {
| this.repositoryRelativePath = repositoryRelativePath;
| }
|
| public boolean equals(Object o) {
| if (this == o) return true;
| if (o == null || getClass() != o.getClass()) return false;
|
| final FileSystemCrawlerDocumentPK that =
(FileSystemCrawlerDocumentPK) o;
|
| if (!fileName.equals(that.fileName)) return false;
| if (!repositoryRelativePath.equals(that.repositoryRelativePath))
return false;
|
| return true;
| }
|
| public int hashCode() {
| int result;
| result = fileName.hashCode();
| result = 29 * result + repositoryRelativePath.hashCode();
| return result;
| }
| }
|
The objective is to map to a DB model a bit like this
Table CrawlerDocument
id, int , sequence, pk
attr 1
attr 2
Table FileSystemCrawlerDocument
id (from CrawlerDocument), int , sequence, pk, fk
fileName, pk
relativeRootPath, pk
attr3
attr4
I can't seem to get this to work.
I gives me the following error:
org.hibernate.AnnotationException: Unable to define/override @Id(s) on a
subclass: com.criticalsoftware.search.entities.FileSystemCrawlerDocument
I'm using Jboss 4.0.4 GA with EJB3
Any help would be very much appreciated.
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3951433#3951433
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3951433
_______________________________________________
JBoss-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-user