Meu banco de dados contém 3 tabelas: As entidades de usuário e serviço têm um relacionamento muitos para muitos e são associadas à tabela SERVICE_USER da seguinte maneira:
USUÁRIOS - SERVICE_USER - SERVIÇOS
A tabela SERVICE_USER contém a coluna BLOCKED adicional.
Qual é a melhor maneira de realizar esse mapeamento? Estas são as minhas classes de entidade
@Entity
@Table(name = "USERS")
public class User implements java.io.Serializable {
private String userid;
private String email;
@Id
@Column(name = "USERID", unique = true, nullable = false,)
public String getUserid() {
return this.userid;
}
.... some get/set methods
}
@Entity
@Table(name = "SERVICES")
public class CmsService implements java.io.Serializable {
private String serviceCode;
@Id
@Column(name = "SERVICE_CODE", unique = true, nullable = false, length = 100)
public String getServiceCode() {
return this.serviceCode;
}
.... some additional fields and get/set methods
}
Segui este exemplo http://giannigar.wordpress.com/2009/09/04/m ... using-jpa / Aqui está um código de teste:
User user = new User();
user.setEmail("e2");
user.setUserid("ui2");
user.setPassword("p2");
CmsService service= new CmsService("cd2","name2");
List<UserService> userServiceList = new ArrayList<UserService>();
UserService userService = new UserService();
userService.setService(service);
userService.setUser(user);
userService.setBlocked(true);
service.getUserServices().add(userService);
userDAO.save(user);
O problema é que o hibernate persiste no objeto Usuário e no UserService. Sem sucesso com o objeto CmsService
Tentei usar a busca EAGER - sem progresso
É possível alcançar o comportamento que estou esperando com o mapeamento fornecido acima?
Talvez exista alguma maneira mais elegante de mapear muitos para muitos na tabela de junção com coluna adicional?
@ElementCollection
de (ou ambos) as entidades Usuário e Serviço.[userFK, serviceFK]
, use uma restrição exclusiva.Eu procuro uma maneira de mapear uma tabela de associação muitos-para-muitos com colunas extras com hibernação na configuração de arquivos xml.
Supondo que tenha duas tabelas 'a' e 'c' com uma associação muitos a muitos com uma coluna denominada 'extra'. Porque não encontrei nenhum exemplo completo, aqui está o meu código. Espero que ajude :).
Primeiro, aqui estão os objetos Java.
Agora, temos que criar a tabela de associação. A primeira etapa é criar um objeto que representa uma chave primária complexa (a.id, c.id).
Agora vamos criar o próprio objeto de associação.
Neste momento, é hora de mapear todas as nossas classes com a configuração xib do hibernate.
A.hbm.xml e C.hxml.xml (exatamente o mesmo).
E, em seguida, arquivo de mapeamento de associação, a_c.hbm.xml.
Aqui está o exemplo de código a ser testado.
fonte
Como dito anteriormente, com o JPA, para ter a chance de ter colunas extras, você precisa usar duas associações OneToMany, em vez de um único relacionamento ManyToMany. Você também pode adicionar uma coluna com valores gerados automaticamente; Dessa forma, ele pode funcionar como a chave primária da tabela, se útil.
Por exemplo, o código de implementação da classe extra deve ser assim:
fonte