Bawie sie z bazami danych i jpa, wczesniej napisalem sobie pare klas, ktore teraz postanowilem wrzucic do DB.
Moze najpierw kod:
Klasa Animal
package kaczynski.impl;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class Animal {
@Id
@GeneratedValue
private int id;
private String name;
private int age;
private LocalDate dateOfBirth;
private double weight;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public LocalDate getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(LocalDate dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public Animal(){
String date=null;
Scanner input = new Scanner(System.in);
System.out.println("Podaj imie");
String name = input.nextLine();
this.setName(name);
System.out.println("Podaj wiek");
int age = input.nextInt();
this.setAge(age);
System.out.println("Podaj wage");
double weight = input.nextDouble();
this.setWeight(weight);
do{
System.out.println("Podaj date narodzin w formacie DD-MM-YYYY");
date = input.nextLine();
}while(!this.dateValidation(date));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
LocalDate date1 = LocalDate.parse(date, formatter);
this.setDateOfBirth(date1);
}
@Override
public String toString() {
return "name=" + name + ", age=" + age + ", dateOfBirth="
+ dateOfBirth + ", weight=" + weight;
}
private boolean dateValidation(String date){
Pattern pattern = Pattern.compile("[0-3]?[1-9]-[0-1]?[1-9]-[1-2][0-9]{3}");
Matcher matcher = pattern.matcher(date);
return matcher.matches();
}
public Animal(String name, int age, String dateOfBirth, double weight) {
this.name = name;
this.age = age;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
LocalDate date1 = LocalDate.parse(dateOfBirth, formatter);
this.setDateOfBirth(date1);
this.weight = weight;
}
}
Klasa animal jest klasa bazowa dla kota
package kaczynski.impl;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import kaczynski.api.VitalFunctions;
@Entity
public class Cat extends Animal implements VitalFunctions {
// @Id
// @GeneratedValue
// private int id;
private String race;
private String furColor;
public String getRace() {
return race;
}
public void setRace(String race) {
this.race = race;
}
public String getFurColor() {
return furColor;
}
public void setFurColor(String furColor) {
this.furColor = furColor;
}
@Override
public String giveVoice() {
return "Miauuu";
}
public Cat() {
Scanner input = new Scanner(System.in);
System.out.println("Podaj kolor futra");
String furColor = input.nextLine();
this.setFurColor(furColor);
System.out.println("Podaj rase kota");
String race = input.nextLine();
this.setRace(race);
}
@Override
public String toString() {
return "Cat [race=" + race + ", furColor=" + furColor + super.toString()+ "]" ;
}
public Cat(String race, String furColor,String name, int age, String dateOfBirth, double weight) {
super(name,age,dateOfBirth,weight);
this.race = race;
this.furColor = furColor;
}
}
klasa main
package kaczynski.main;
import java.util.ArrayList;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import kaczynski.impl.Animal;
import kaczynski.impl.Cat;
import kaczynski.impl.Snake;
public class Main {
private static EntityManager entityManager;
private static EntityManagerFactory entityManagerFactory;
private ArrayList<Animal> listAnimal = new ArrayList<>();
public static void main(String[] args) {
entityManagerFactory = Persistence.createEntityManagerFactory("myDatabase");
entityManager = entityManagerFactory.createEntityManager();
//addAnimals();
Animal Cat = new Cat("Persian", "Brown", "Jack", 3, "12-11-2009", 3.2);
entityManager.getTransaction().begin();
entityManager.persist(Cat);
entityManager.getTransaction().commit();
entityManager.close();
entityManagerFactory.close();
}// end of main
private static void addCat() {
Animal Cat = new Cat("Persian", "Brown", "Jack", 3, "12-11-2009", 3.2);
entityManager.getTransaction().begin();
entityManager.persist(Cat);
entityManager.getTransaction().commit();
}
private static void addDog() {
Animal Dog = new kaczynski.impl.Dog(true, "Janosik", "Burek", 1, "11-12-1992", 6.5);
entityManager.getTransaction().begin();
entityManager.persist(Dog);
entityManager.getTransaction().commit();
}
private static void addSnake() {
Animal snake = new Snake(true, 5.6, "Sekacz", 2, "17-11-1111", 6.5);
entityManager.getTransaction().begin();
entityManager.persist(snake);
entityManager.getTransaction().commit();
}
private static void addAnimals(){
addCat();
//addSnake();
//addDog();
}
}
Przy zapisie do bazy danych obiektu Cat, wywolywany jest kontruktor domyslny, z klasy Animal i Cat, do samej bazy idzie obiekt zdefiniowany konstruktorem z parametrami.
Jednak nie rozumiem czemu wywoluje mi sie podczas dzialania programu konstruktor domyslny i to jest moje pytanie do Was.