1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Como inserir dados "complexos" com spring-data-jpa de maneira elegante?

Olá pessoal tenho 2 objetos com relação 1:1 e gostaria de salva-los no banco utilizando Spring-Data mas a forma que eu encontrei de fazer isso não achei muito legal sou noob em java

Entidades

@Entity
@NamedQueries({
    @NamedQuery(name="Person.findAll", query="select p from Person p"),
    @NamedQuery(name="Person.findByName", query="select p from Person p where p.name like :name")
})
public class Person {

    @Id
    @GeneratedValue
    private long id;

    @NotEmpty(message="{NotEmpty}")
    private String name;
//getter setter...
}
@Entity
public class User implements Serializable {

    @Id
    @GeneratedValue
    private long id;


    @OneToOne
    @Valid
    private Person person;


    @NotEmpty(message="{NotEmpty}")
    private String username;

    @NotEmpty(message="{NotEmpty}")
    private String password;

    @NotEmpty(message="{NotEmpty}")
    @Email(message="{Email}")
    private String email;

//getter setter...

Repositórios

public interface UserRepository extends JpaRepository<User, Long> {

    @Query("SELECT u FROM User u JOIN Person p where p.id = u.person.id")
    List<User> findAll();

}

public interface PersonRepository extends JpaRepository<Person, Long>{

}

Método que salva objeto "composto" é ele que eu queria melhorar.

@RequestMapping(value = "/save", method= RequestMethod.POST)
    public String save(@Valid @ModelAttribute("user") User user, BindingResult result) {

        if(result.hasErrors()){
            return "/user/new";
        }


        Person person = personRepository.save(user.getPerson());
        user.setPerson(person);
        userRepository.save(user);        
        return "ok";
    }

Desde já muito obrigado!

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags spring hibernate ou faça a sua própria pergunta.