Sto lavorando su un progetto javaFX usando il Hibernate e il database H2 , sto cercando di seguire il concetto di pattern di progettazione MVC, quindi ho creato 3 pacchetti:
- 
modelli : contiene classi POJO 2.1 views.fxml : contiene file fxml 2.2. views.controllers : contiene le classi di controller dei file fxml 
3 . dao : contiene classi che interagiscono con il database.
Al momento ogni cosa va bene, ma quando ho seguito un tutoriel, ho scoperto che ha aggiunto Livello servizio , questo ha un ruolo per creare oggetti e inviarli al livello DAO , ho creato questo esempio, ma sono confuso se è vero o sono fuori i concetti, questo è il mio esempio:
Modello:
@Entity
@javax.persistence.Table(name = "ENTREPRENEUR")
public class Entrepreneur implements Serializable {
    private String Id;
    private final StringProperty lastName = new SimpleStringProperty();
    private final StringProperty firstName = new SimpleStringProperty();
    private final StringProperty email = new SimpleStringProperty();
    private final StringProperty password = new SimpleStringProperty();
    private final StringProperty category = new SimpleStringProperty();
    public Date signDate;
    public byte[] picture;
    public Set<Corporation> corporations;
    public Entrepreneur() {
        corporations = new HashSet<>();
    }
    @OneToMany(mappedBy = "entrepreneur")
    public Set<Corporation> getCorporations() {
        return corporations;
    }
    public void setCorporations(Set<Corporation> corporations) {
        this.corporations = corporations;
    }
    @Column(name = "CATEGORY")
    private String getCategory() {
        return category.get();
    }
    public void setCategory(String value) {
        category.set(value);
    }
    private StringProperty categoryProperty() {
        return category;
    }
    @Column(name = "PICTURE")
    public byte[] getPicture() {
        return picture;
    }
    public void setPicture(byte[] picture) {
        this.picture = picture;
    }
    @Column(name = "SIGN_UP_DATE")
    public Date getSignDate() {
        return signDate;
    }
    public final void setSignDate(Date signDate) {
        this.signDate = signDate;
    }
    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    @Column(name = "ID", updatable = false, nullable = false)
    public String getId() {
        return Id;
    }
    public void setId(String Id) {
        this.Id = Id;
    }
    @Column(name = "EMAIL")
    public String getEmail() {
        return email.get();
    }
    public final void setEmail(String value) {
        email.set(value);
    }
    public StringProperty emailProperty() {
        return email;
    }
    @Column(name = "PASSWORD")
    public String getPassword() {
        return password.get();
    }
    public final void setPassword(String value) {
        password.set(value);
    }
    public StringProperty passwordProperty() {
        return password;
    }
    @Column(name = "FIRST_NAME")
    public String getFirstName() {
        return firstName.get();
    }
    public final void setFirstName(String value) {
        firstName.set(value);
    }
    public StringProperty firstNameProperty() {
        return firstName;
    }
    @Column(name = "LAST_NAME")
    public String getLastName() {
        return lastName.get();
    }
    public final void setLastName(String value) {
        lastName.set(value);
    }
    public StringProperty lastNameProperty() {
        return lastName;
    }
    public void addCompany(Corporation company) {
        if (!corporations.contains(company)) {
            corporations.add(company);
        }
    }
Controller:
  @FXML
    private void createAccount() throws IOException {
        String lastNameValue = lastNameField.getText();
        String firstNameValue = firstNameField.getText();
        String categoryValue = this.category.getValue();
        String emailValue = emailField.getText();
        String passwordValue = Security.encrypt(passwordField.getText());
        new EntrepreneurServiceImp().create(lastNameValue, firstNameValue, categoryValue, emailValue, passwordValue);
    }
Servizio:
public class EntrepreneurServiceImp implements EntrepreneurService {
    @Override
    public void create(String lastName, String firstName, String category, String email, String password) {
        //Create and fill an object
        Entrepreneur entrepreneur = new Entrepreneur();
        entrepreneur.setLastName(lastName);
        entrepreneur.setFirstName(firstName);
        entrepreneur.setCategory(category);
        entrepreneur.setEmail(email);
        entrepreneur.setPassword(password);
        entrepreneur.setSignDate(Date.valueOf(LocalDate.now()));
        //Send object to DAO layer
        new EntrepreneurDao().save(entrepreneur);
    }
}
DAO:
public class EntrepreneurDao extends DAO<Entrepreneur> {
    @Override
    public boolean save(Entrepreneur entrepreneur) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        session.save(entrepreneur);
        session.getTransaction().commit();
        return true;
    }
}
Privatamente, creo e riempio l'oggetto in layer controller e chiamo il metodo DAO dal controller , ma ora ho aggiunto Livello di servizio che ha un ruolo solo con gli oggetti, La mia implementazione è vera o no?