Pages

Thursday, June 20, 2013

JPA-маппинг сущности и ее свойств

В самом простом варианте для маппинга сущности нужно только добавить аннотации @Entity и @Id. Этот способ подходит, если имена таблицы и ее колонок совпадают с именем класса сущности и его полей.

Но как сделать маппинг, если имена не совпадают?

Возьмем за основу приложение, созданное в посте "Основы JPA и Hibernate".

Создадим базу данных jpa_table_column_mappings_tutorial и таблицу artists с колонками artist_id, artist_name и artist_genre:
CREATE DATABASE jpa_table_column_mappings_tutorial;
USE jpa_table_column_mappings_tutorial;

CREATE TABLE artists (
artist_id INT PRIMARY KEY,
artist_name VARCHAR(30),
artist_genre VARCHAR(20)
);

Имена таблицы и ее колонок отличаются от имени сущности и ее полей.
Для маппинга сущности нужно добавить классу Artist аннотацию @Table с указанием имени таблицы.
Для маппинга полей сущности нужно добавить каждому полю аннотацию @Column с указанием имени колонки таблицы:
package com.jpa.table.column.mappings.tutorial.domain;

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

@Entity
@Table(name = "artists")
public class Artist {

    @Id
    @Column(name = "artist_id")
    private int id;

    @Column(name = "artist_name")
    private String name;

    @Column(name = "artist_genre")
    private String genre;

    public Artist() {

    }

    public Artist(int id, String name, String genre) {
        this.id = id;
        this.name = name;
        this.genre = genre;
    }

    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 getGenre() {
        return genre;
    }

    public void setGenre(String genre) {
        this.genre = genre;
    }

    @Override
    public String toString() {
        return "Artist{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", genre='" + genre + '\'' +
                '}';
    }
}

Остальные файлы приложения останутся без изменений.

Класс JpaTableColumnMappingsTutorial аналогичен классу JpaHibernateBasicsTutorial, описанному в посте "Основы JPA и Hibernate":
package com.jpa.table.column.mappings.tutorial;

import com.jpa.table.column.mappings.tutorial.domain.Artist;
import com.jpa.table.column.mappings.tutorial.service.ArtistService;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import java.util.List;

public class JpaTableColumnMappingsTutorial {

    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("JpaTableColumnMappingsTutorial");
        EntityManager em = emf.createEntityManager();
        ArtistService service = new ArtistService(em);

        System.out.println("--- Create and persist artist ---");
        em.getTransaction().begin();
        Artist artist = service.createArtist(1, "Franz Ferdinand", "Rock");
        em.getTransaction().commit();
        System.out.println(String.format("Persisted: %s\n", artist));

        System.out.println("--- Find artist ---");
        artist = service.findArtist(1);
        System.out.println(String.format("Found: %s\n", artist));

        System.out.println("--- Find all artists ---");
        List<Artist> artists = service.findAllArtists();
        for (Artist foundArtist : artists) {
            System.out.println(String.format("Found: %s\n", foundArtist));
        }

        System.out.println("--- Update artist ---");
        em.getTransaction().begin();
        artist = service.changeArtistGenre(1, "Indie Rock");
        em.getTransaction().commit();
        System.out.println(String.format("Updated: %s\n", artist));

        System.out.println("--- Remove artist ---");
        em.getTransaction().begin();
        service.removeArtist(1);
        em.getTransaction().commit();
        artist = service.findArtist(1);
        System.out.println(String.format("Found: %s\n", artist));
    }
}

Запустим метод main():

















Приложение отработало аналогично взятому за основу, а это значит, что мы успешно сделали маппинг сущности и ее свойств с помощью аннотаций @Table и @Column.

Структура проекта:




Исходный код созданного приложения доступен по ссылке https://code.google.com/p/jpa-table-column-mappings-tutorial/.

Рекомендуемые посты:

No comments:

Post a Comment