2012-08-09 2 views
0

J'apprends Hibernate ORM (v.3) maintenant et j'ai une question. J'ai une table appelée UTILISATEURS, créée avec annotations:Créer une table dynamiquement avec hibernate

package com.hibernatedb.entities; 

import javax.persistence.*; 

@Entity 
@Table(name = "USERS",uniqueConstraints = {@UniqueConstraint(columnNames={"USER_LOGIN", "USER_EMAIL"})}) 
public class User { 

@Column(name = "USER_LOGIN", length=80, nullable=false) 
private String login; 

@Column(name = "USER_PASS", length=80, nullable=false) 
private String password; 
    @Column(name = "USER_EMAIL", length=80, nullable=false) 
private String email; 

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
@Column(name = "USER_ID", nullable=false) 
private Long id; 

... 
// some getters and setters, toString() and other stuff 
... 
} 

Et une entité produit:

@Entity 
@Table(name = "PRODUCTS",uniqueConstraints = {@UniqueConstraint(columnNames={"PRODUCT_ID", "PRODUCT_NAME"})}) 
public class Product { 

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
@Column(name="PRODUCT_ID") 
private long id; 

@Column(name="PRODUCT_NAME", length=85, nullable=false) 
private String name; 

@Column(name="PRODUCT_DESCRIPTION", columnDefinition="mediumtext", length=1000) 
private String description; 

@Column(name="PRODUCT_COST", nullable=false) 
private double cost; 

Alors ma question est la suivante: Comment peut-on créer une table appelée comme « USER +

User.getId()

BUYS », qui Contai ns a 2 clés étrangères (user_id et Product_ID) pour l'utilisateur dans l'entité (table de l'enregistrement) "utilisateur" sans création de table SQL brute, mais en utilisant des annotations Hibernate ou XML mapping.So je veux avoir quelque chose comme

public class TransactionEntityBulider() { 
public TransactionEntityBulder(User user)  
    // something that build me "USER + User.getId() BUYS" table and 
} 
public TransactionEntity getEntity() { 
    // something that return a "USER + User.getId() BUYS" table entity 
} 

Aussi je voudrais voir d'autres façons de résoudre mon problème.

+0

Voulez-vous dire que vous voulez créer USER_BUYS de table (qui contient USER_ID et PRODUCT_ID)? – Phan

+0

Non, je voulais créer une table pour chaque enregistrement dans la table USERS avec un nom comme "USER" + User.getId() + "BUYS". Et ces tables contiendront les clés étrangères USER_ID et PRODUCT_ID. – teddypickerfromul

Répondre

0

Je pense que hibernate n'est pas fait pour ce genre d'utilisation, car il faudrait utiliser des mappages dynamiques. Hibernate fournit des moyens de spécifier le mappage statiquement (xml et annotations).

Je vous suggère de modifier votre approche. Il ne devrait normalement pas être dangereux d'avoir tous les "USER_BUY" dans la même table. Exemple:

@Entity 
public class User { 
... 
    @OneToMany(cascade=CascadeType.ALL, mappedBy="user") 
    List<UserBuys> buys = new ArrayList<UserBuys>(); 
... 
} 

@Entity 
public class Product { ... } 

@Entity 
public class UserBuys { 
    ... 

    @ManyToOne 
    Product product; 

    @ManyToOne 
    User user; 
} 
Questions connexes