Total Pageviews

Monday 26 March 2012

How to cast a list in inheritance

For Example:
public class Person {};
public class Student extends Person{};
List<Person> persons=new ArrayList();
List<Student> students=new ArrayList();

persons=students;

how can you assign students to persons? the last line will throw an error.

Wednesday 21 March 2012

Example of Inheritance in EJB

table structure

create table "APP".PERSON
(
 ID INTEGER not null primary key,
 NAME VARCHAR(256),
 ADDRESS VARCHAR(256),
 PHONE VARCHAR(256),
 EMAIL VARCHAR(256),
 TYPE VARCHAR(256)
)



person.java

import javax.persistence.*;



@Entity
@Table(name = "PERSON")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.STRING,length=1)
public class Person implements java.io.Serializable {

@Id
@Column(name = "ID")
private int id;
@Column(name = "NAME")
private String name;
@Column(name = "ADDRESS")
private String address;
@Column(name = "PHONE")
private String phone;
@Column(name = "EMAIL")
private String email;
@Column(name = "TYPE")
private String type;

public Person() {
}
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; }
public String getPhone() { return phone; }
public void setPhone(String phone) { this.phone = phone; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public String getType() { return type; }
public void setType(String type) { this.type = type; }
}

student.java

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
@Entity
@DiscriminatorValue(value="S")
public class Student extends Person {
    public Student() {
    }
}

employee.java

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;@Entity
@DiscriminatorValue(value="E")
public class Employee extends Person{
    public Employee() {
    }

Tuesday 20 March 2012

How to get max value for identity column in EJB-QL

For example,
I have a table Bookorder  with an Identity column Id.

I can execute the following:
Query query1 = em.createQuery("SELECT MAX(b.id) FROM Bookorder b");       
int bo_max=(Integer)query1.getSingleResult();

Please notice that it's Integer and not int when casting the result of query.

Sunday 18 March 2012

Get Auto Increment Id after persist

If you have entity marked with annotations @Id and @GeneratedValue(strategy = GenerationType.AUTO), you want get the Id after persist(), then use em.flush().

public int addEmployer(String name) {
        Employer e1 = new Employer();       
        e1.setName(name);
        em.persist(e1);
        em.flush();       
        return e1.getId();
    }

How to persist entity with auto increment Id

when create new entity class from database, if the primary key (for example "Id") with auto increment get annotation @NotNull. At this time, if you use entity manager try to persist an entity, neither set the Id value nor automaticly generate the Id.

Foe Example:

Employer e1 = new Employer();       
e1.setName(name);
em.persist(e1);

The above will get error

In the Employer entity class

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@NotNull.-----------------------------------------------------Delete it!!
@Basic(optional = false)
@Column(name = "ID")
private Integer id;

You will  fix the problem.

Saturday 17 March 2012

Id Auto Increment in Java DB

Using Database Table grab structure  can get the following:

create table "APP".EMPLOYER
(
 ID INTEGER default AUTOINCREMENT: start 1 increment 1 not null primary key,
 NAME VARCHAR(256)
);

but  this can never be run in the SQL command window
To fix the problem, change the above to the following:

CREATE TABLE "APP"."EMPLOYER"
("ID" INT not null primary key         GENERATED ALWAYS AS IDENTITY         (START WITH 1, INCREMENT BY 1),  
"NAME" VARCHAR(256));