通过组合Java中另一个表的一列来创建表

时间:2017-04-21 11:39:06

标签: java hibernate annotations hibernate-mapping foreign-key-relationship

经过一些研究,我找不到相关的东西。

我使用如下表:

@Table(name="product")
public class Product {
   @Id
   @GeneratedValue
   private long productId;

   // other irrelevant columns and code goes here
}

现在,我想创建另一个表格:

table columns and what rows I want to show

为了做到这一点,我通过以下其他示例或示例尝试了类似的事情:

@Table(name="combined_products")
public class CombinedProducts {

   @EmbeddedId
   protected CombinedProductsPK bridgeId;

   @ManyToOne
   @JoinColumns({
      @JoinColumn(name = "product_1", referencedColumnName = "product_id"),
      @JoinColumn(name = "product_2", referencedColumnName = "product_id")
   })

   @Column(name = "notes")
   private String notes;

   public ProductMatrix() {
      bridgeId = new CombinedProductsPK();
   }

   // irrelevant code again
}

和CombinedProductsPK:

@Embeddable
public class CombinedProductsPK implements Serializable {

   public Long product_1;
   public Long product_2;

   public CombinedProductsPK() {}

   @Override
   public boolean equals(Object obj) {
      if (this == obj) {
         return true;
      }
      CombinedProductsPK b = (CombinedProductsPK)obj;
      if (b == null) {
         return false;
      }
      return b.product_1.equals(product_1) && b.product_2.equals(product_2);
   }

   @Override
   public int hashCode() {
      return (int)(product_1 + product_2);
   }
}

所有似乎都很完美。

但是,我的问题是,当我查看数据库并且特定于combined_products表时,有没有 FOREIGN_KEY约束。有没有办法在Java中描述这个约束,或者我必须在Java部分手动处理这个?

这就是我的表在MySQLWorkbench中的样子

CREATE TABLE `combined_products` (
  `product_1` bigint(20) NOT NULL,
  `product_2` bigint(20) NOT NULL,
  `notes` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`product_1`,`product_2`)
)

我在这里走到了尽头,所以也许我走错了路。每个推荐被接受!提前致谢...

1 个答案:

答案 0 :(得分:0)

我没有明白你的意思。但也许你需要尝试@JoinTable吗?

enter link description here

我希望它有所帮助。