Friday, 13 June 2014
Monday, 2 June 2014
Commonly used Annotations in EJB
Annotation
Annotations are used to describe configuration meta-data in ejb classes. By this way EJB 3.0 eliminates the need to describe configuration data in configuration XML files.Purpose of annotation is to attach additional information in the class or a meta-data of a class within its source code.
Annotaions Majorly used in any EJB class
In general our IDE(Jdeveloper/NetBeans/Eclipse)generates some annotaions by default when we create entities.
1.@Entity
purpose
To convert normal class into Entity we
will use this annotation.we need to import javax.persistence.Entity API.
Example
@Entity //Now we convert this class
Test to an entity which will interact with DB---step 2
public Class Test(){//general class
—step 1
}
2.@ID
purpose
Used to mention the Primary Key in the
entity.import javax.persistance.ID
example:
@Entity
Public class Test(){
@ID //now mention like this column in
the table will act as PK—step 4
private int emp_Id; //field in this
class—step 3
//getter and setter
}
3.@GeneratedValue
Purpose
To mention the feature of Primary key
generation in our table.For example In our table EMP_ID if we select
Autogenerate the ID value.So in this scenerio we
need to mention this feature in our entity using this annotaion and
by sending strategy to generate the primary key.
Example
@Entity
public class Test(){
@ID
//we mentioned here the generation type
of Primary key in our table.we have
// 4 types of
Strategies(AUTO,SEQUENCE,IDENTITY,TABLE)-----step 5
@GeneratedValue(Strategy=GenerationType.Identity)
private int emp_Id;
//getter and setter for this field here
}
4.@Table:
Purpose
If we need to use some other name for
our class other than the original Table name,we will go for @Table
Annotation.So By using this annotaion we will going to connect the
original table with our entity class.
Example:
@Entity
@Table (name=”Test”)
//Original
table name in DB,and Previously we've used same name to our class,so
we no need to mention this annotation there.--step 7
Public class Sample() //class name
differs from table name.--step 6
{
@ID
@GeneratedValue(Strategy=GenerationType.Identity)
private int emp_Id;
//getter and setter for this field here
}
NOTE:
convention over configuration:
Configure only when the default
convention is not as per the requirements. Means here we can use
these annotations to configure the original table/fields mapping.(we have to make JPA understand this default is not we want).
5.@Column
purpose
Used to mention the original column name in the table whenever our field name differs from the original column in the table we used.
Example
@Entity
@Table (name=”Test”)
Public class Sample()
{
@ID
@GeneratedValue(Strategy=GenerationType.Identity)
//By using column annotation we aregoing to map the column name in the table.previously we used same name to our field so we no need to mention this annotation there--step9
@column(name ="emp_Id")
private int employeeID;//we used different name for this field and this not the default name what we want---step8
//getter and setter for this field here
}
6.@singleton
Specifies that there will be only one instance of this bean will be created in Application server.(used in class level)
7.@Startup
Intance of this bean is created whenever the applicaiton is deployed in the server.(used in class level).So by marking the class with @startup,We are telling the container like eagerly create the bean instance as soon as the application is deployed instead of waiting for some component to use it.
8.@PostContruct
First method to run when the instance is created.just like Main() method in normal Java class.
Example :
@Singleton//specifies that only one instance should be there in server
@Startup//instance of this bean(Test) is created when we deploy this application
public class Test(){
//When we deploy this application in server this is methond automatically run //if we annotate this using this annotation
@PostConstruct
public void myTestMethod(){
//code
}
}
9.@PersistenceContext
This is used to inject the entitymanager class in our entity and we need to pass the Persistence Unit name in this to work with entity manager transactions like CRUD operations in our J2EE applications.
Example
@Singleton
@Startuppublic class Test()
{
@PersistenceContext(name="//Persistence context name as in persistence.xml file of our application//")
EntityManager em; //here we just create a object of EntityManager type,in desktop applications we need to create entitymanager by using entitymanager factory
@PostConstruct
public void myTestMethod(){
//code
//here we can use the EntityManager transactions by using em to interact with //DB like em.persist();em.remove();
}
}
10.@Lob
To specify the functionality of the database to store Large objects(LOB) like Images,documents,Presentaions,pdf files.we have two types.(Blob-binary Large Objects and Clob -charecter Large Objects).
Example:
@Lob
private byte[] image;
//getter and setter
public byte getImage(){
}
public void setImage(byte Image){
}
11.@Basic
In the case like,Blod field not to be loaded eargerly(automatically),and to make the field to be loaded when ever someone access the field by using getter method of the field.
Example:
@Lob
@Basic(fetch=FetchType.Lazy)
// Lazy:Hint to the JPA Provider
This image field is loaded when some one access this field using getImage in our example.
//Eager:
This field is loaded automatically when the application is deployed
private byte[] image;
//getter and setter
public byte getImage(){
}
public void setImage(byte Image){
}
12.@Enumerated
To prevent user to not to enter any other random string into the field,and to restrict ther user to enter only specified values into that field,we will go for this Annotaion.
Example:
- Lets consider Gender field.In our DB we would like to store M/F values in this field.But normally when we create entities we use like
public class Test(){
private String gender;
public String getgender(){
}
public void setgender(String gender){
}
}
- So as we declare gender field as String ,user may allowed to enter any other String value other than M/F as per our requirement.(male/female/....).To restrict the user not to enter any other random string into this field,WE have to create a enum class first.Create NewEnum class
public enum Gender{
M, //These are the two constants in Gender enum class
F
}
- Now we need to modify our Actual Test() Class as
@Entity
public class Test(){
@Enumerated(EnumType.String)//Here two types of enum types are there
1.Ordinal-Default type which will store 0/1 in DB
2.String-It will store the actual constants M/F which we have mensioned in our enum class into DB.
@Column (name="gender")
private Gender gender;
public Gender getgender(){
}
public void setgender(Gender gender){
}
}
- Usage
Test.setgender(Gender.F);
13.@Temporal
If we have any Date field in our DB,By using this annotaion we can prevent the format of data to be stored in this field like date,time, date and time.....
Example
@Temporal(TemporalType.DATE/TemporalType.TIME/TemporalType.TIMESTAMP)
@Column(name="Join_date")
private Date HireDate;
14.@Transient
Used to mark a filed that should not be persistence in database when we save the entity data into database forexaple using em.persist().
Example:
@Transient
private String empString;
when we call em.persistence() this field empString wont be stored in DB.
:)
Subscribe to:
Posts (Atom)