Switch to full style
Java persistent API
Post a reply

Id reference annotation relationship

Tue Apr 20, 2010 2:23 pm

Id reference annotation relationship:
One of the alternative ways to do a many to one relationship in JPA entity is to add annotation to Id and referenced object. The following three classes show this relation .

Topic class :
Code:

package com
.codemiles.jpa;
import java.util.Collection;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.OneToMany;


@
Entity
@Table(name="TOPIC")
public class Topic implements java.io.Serializable{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @Id
    private int Id
;
    private String title;
    private Date creationDate;
    private Date modifedDate;
    private String content;
    @OneToMany(mappedBy="topic")
    private Collection<Comment> comments;

    public int getId() {
        return Id;
    }
    public void setId(int id) {
        Id = id;
    }
    
    
@Column(name="TITLE")
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    
    
@Column(name="CREATION_DATE")
    public Date getCreationDate() {
        return creationDate;
    }
    public void setCreationDate(Date creationDate) {
        this.creationDate = creationDate;
    }
    
    
@Column(name="MODIFED_DATE")
    public Date getModifedDate() {
        return modifedDate;
    }
    public void setModifedDate(Date modifedDate) {
        this.modifedDate = modifedDate;
    }
    
    
@Column(name="CONTENT")
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public void setComments(Collection<Comment> comments) {
    this.comments = comments;
    }
    public Collection<Comment> getComments() {
    return comments;
    }
}
 


Comment class :
Code:

package com
.codemiles.jpa;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;


/**
 * @author codemiles
 *
 */
@Entity
@Table(name="COMMENT")
@
IdClass(Comment_Id.class)
public class Comment implements java.io.Serializable{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @Id
    private int Id
;
    private String title;
    private Date creationDate;
    private Date modifedDate;
    private String commentBody;
    @Id
    
@Column(name = "TOPIC_ID", insertable = false, updatable = false)
    private int topic_id;
    
    
@ManyToOne
    
@JoinColumn(name = "TOPIC_ID")
    private Topic topic;
    
    public int getId
() {
        return Id;
    }
    public void setId(int id) {
        this.Id = id;
    }
    
    
@Column(name="TITLE")
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    
    
@Column(name="CREATION_DATE")
    public Date getCreationDate() {
        return creationDate;
    }
    public void setCreationDate(Date creationDate) {
        this.creationDate = creationDate;
    }
    
    
@Column(name="MODIFED_DATE")
    public Date getModifedDate() {
        return modifedDate;
    }
    public void setModifedDate(Date modifedDate) {
        this.modifedDate = modifedDate;
    }
 
    public void setCommentBody
(String commentBody) {
    this.commentBody = commentBody;
    }
    @Column(name="COMMENT_BODY")
    public String getCommentBody() {
    return commentBody;
    }
    public void setTopic_id(int topic_id) {
    this.topic_id = topic_id;
    }
    public int getTopic_id() {
    return topic_id;
    }
    public void setTopic(Topic topic) {
    this.topic = topic;
    }
    public Topic getTopic() {
    return topic;
    }
}


 


Id class which is used in the relationship :

Code:

package com
.codemiles.jpa;

/**
 * @author codemiles
 *
 */
public class Comment_Id implements java.io.Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private int topic_id;
    public Comment_Id(){
    
    
}
    public Comment_Id(int topic_Id){
    this.topic_id=topic_Id;
    }
    public void setTopic_id(int topic_id) {
    this.topic_id = topic_id;
    }
    public int getId() {
    return topic_id;
    }
    public boolean equals(Object o) {
        return ((o instanceof Comment_Id) && 
               
            topic_id 
== ((Comment_Id) o).getId());

    }

    public int hashCode() {
        return  topic_id ;
    }

}
 




Post a reply
  Related Posts  to : Id reference annotation relationship
 object reference be cast to an interface reference     -  
 @Temporal JPA annotation     -  
 Compound Key and IdClass annotation     -  
 @Transient annotation in JPA entity     -  
 @QueryHint annotation to customize the query     -  
 relationship an event-listener interface & event handler     -  
 relationship between the Canvas class and the Graphics class     -  
 Reference Parameters     -  
 Method Parameters,,,is it by value or reference???     -  
 Passing a Reference Variable     -  

Topic Tags

Java JPA