2016-09-10 9 views
0

私は、db transaltionロジックのいくつかの例を学び、エンティティ注釈を使ってこのdbをどのように変更できるかを理解しようとしています。DB example 1、NとN、論理問題と私は以前のスキーマで次のように翻訳しています:hibernate 5.2.2:db translation logic

モデル0、N Article、Article 1,1 Model。

ユーザ0、Nカート、カート1,1ユーザ。

第0条、Nカート、カート1,1条。

私はクラスとメインのほとんどを作りましたが、ビルド関係の一部が私を止めました。

モデル:

@Entity 
@Table(name = "MODEL") 
public class Model{ 
    private int id; 
    private double cost; 
    private double price; 

    public model(int id,double cost,double price){ 
     this.id=id; 
     this.cost=cost; 
     this.price=price; 
    } 

    @Id 
    @Column(name="idModel") 
    public void setId(int id){this.id=id;} 
    public int getId(){return id;} 

    @Column(name="cost") 
    public void setCost(double cost){this.cost=cost;} 
    public double getCost(){return cost;} 

    @Column(name="price") 
    public void setPrice(double price){this.price=price;} 
    public double getPrice(){return price;} 
} 

記事:

@Entity 
@Table(name = "ARTICLE") 
public class Article{ 
    private int id; 
    private String code; 
    private int quantity; 
    private Model thisModel; 

    public Article(int id, String code, int quantity, Model model){ 
     this.id=id; 
     this.code=code; 
     this.quantity=quantity; 
     thisModel=model; 
    } 

    @Id 
    @Column(name="idArticle") 
    public void setId(int id){this.id=id;} 
    public int getId(){return id;} 

    @Column(name="code") 
    public void setCode(String code){this.code=code;} 
    public String getCode(){return code;} 

    @Column(name="quantity") 
    public void setQuantity(int quantity){this.quantity=quantity;} 
    public int getQuantity(){return quantity;} 

    @Column(name="model_idModel") 
    public void setModel(Model model){this.model=model;} 
    public Model getModel(){return model;} 
} 

ユーザー:

@Entity 
@Table(name = "USER") 
public class User{ 
    private int id 
    private String name; 

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

    @Id 
    @Column(name="idUser") 
    public void setId(int id){this.id=id;} 
    public int getId(){return id;} 

    @Column(name="name") 
    public void seName(String name){this.name=name;} 
    public int getName(){return name;} 
} 

カート:

@Entity 
@Table(name = "CART") 
public class Cart { 
    private User user; 
    private Article article; 

    publi Cart(User user,Article article){ 
     this.user=user; 
     this.article=article; 
    } 

    @Id 
    @Column(name="idUser") 
    public void setUser(User user){this.user=user;} 
    public User getUser(){return user;} 

    @Id 
    @Column(name="idArticle") 
    public void setArticle(Article article){this.article=article;} 
    public User getArticle(){return article;} 
} 
これが私の状況です0

メイン:

public class test(){ 
    public static void main(String[] args) { 
     SessionFactory factory = new Configuration().configure().buildSessionFactory(); 
     Session session=factory.getCurrentSession(); 
     Transaction transaction = null; 
     try { 
     transaction = session.beginTransaction(); 
     Model m1= new Model (1,12,24); 
     Model m2= new Model (2,40,88); 
     Article a1m1 = new Article(1,"blue",200,m1); 
     Article a2m1 = new Article(2,"rad",100,m1); 
     Article a1m2 = new Article(1,"only green",2000,m2); 
     User u1 = new User(1,"Max"); 
     User u2 = new User(2,"Ada"); 
     Set<Cart> Carts = new HashSet<Cart>(); 
     carts.add(new Cart(u1,a2m1)); 
     carts.add(new Cart(u2,a1m2)); 
     session.save(a1m1); 
     session.save(a2m1); 
     session.save(a1m2); 
     session.save(u1); 
     session.save(u2); 
     session.save(Carts); 
     transaction.commit(); 
     } catch (HibernateException e) { 
     transaction.rollback(); 
     e.printStackTrace(); 
     } finally { 
     session.close(); 
     } 
    } 
} 

私も私のメインは完璧ではないことを信じて、実行時に/ compaileは私にいくつかの問題を与えるだろう、と私は、このデシベル換算でいくつかのロジックの概念を失っています。

+0

あなたの質問がありますか? –

+0

あなたが私のコードを実行すると私が期待しているものとは遠く離れているので、クラス間の関連付けのマッピングがすべて失われているので、コードは不完全です。私はそれを解決する方法を理解する必要があり、なぜ他のソリューションの代わりに解決策が必要なのですか? – Francesco

+0

@Francescoコードは不完全で、使用するデータベースはどこで決定しましたか?私は、MySQLやPostgreSQLやHypersonicを期待していますが、私はそれらのどれも見つけませんでした。 –

答えて

0

リレーションのアノテーションは、非リレーショナル・カラムのアノテーションと異なります。 relation-columnsには@Columnの代わりに@ManyToOne@OneToManyを使用してください。

@Columnを使用すると、複合型はその関係ではなく、その列をマップすると考えられます。