0

私は今、Hibernate ORM(v. 3) を学習していますが、質問があります。注釈で作成された USERS というテーブルがあります。

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
... 
}

そして Product エンティティ:

@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;

だから私の質問は次のとおりです。「USER +」のようなテーブルを作成するにはどうすればよいですか

ユーザー.getId()

BUYS」には、エンティティ (テーブル レコード) のユーザーの 2 つの外部キー (USER_ID と PRODUCT_ID) が含まれており、未加工の SQL テーブルの作成は行わず、Hibernate アノテーションまたは XML マッピングを使用しています。

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
}

また、私の問題を解決する別の方法をいくつか見たいと思います。

4

1 に答える 1

0

動的マッピングを使用する必要があるため、そのような使用法では休止状態は行われていないと思います。Hibernate は、マッピングを静的に指定する方法を提供します (xml および注釈)。

アプローチを変更することをお勧めします。通常、すべての「USER_BUY」を同じテーブルに配置しても問題はありません。例 :

@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;
}
于 2012-08-09T12:43:30.717 に答える