你应该把FK作为另一个表的索引吗?

时间:2018-01-05 11:11:44

标签: java mysql database hibernate

我有这个简单的表

table

类型有FK,名称有PK。

我的问题是type是类型的索引而不是实际的字符串。因此,当我向数据库添加TestCase时,我必须给索引而不是简单地编写String类型。

Hibernate是否实现了执行此操作的功能,还是我必须执行另一个查询来检查与该typeName对应的索引是什么?

 public static void addTestCase(String testName, String type, MultipartFile file, String user) {
    byte[] fileByte;
    Date date = new Date();
    final DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    String creationDate = sdf.format(date);

    try {
       fileByte = file.getBytes();
        TestCase testCase = new TestCase(testName,type,fileByte,creationDate,user);
        Database.addToDatabase(testCase);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

测试用例

public class TestCase {

private int id;
private String name;
private String type;
private byte[] data;
private String creationDate;
private String createdBy;

public TestCase() {
}

public TestCase(String name, String type, byte[] data, String creationDate, String createdBy) {
    this.name = name;
    this.type = type;
    this.data = data;
    this.creationDate = creationDate;
    this.createdBy = createdBy;
}

...get and setters

XML

<hibernate-mapping>
<class name="com.atp.Model.TestCases.TestCase" table="testCases">
    <meta attribute="class-description">
        This class contains the testCases details.
    </meta>
    <id name="id" type="int" column="idtestCase">
        <generator class="native"/>
    </id>
    <property name="name" column="name" type="string"/>
    <property name="type" column="type" type="string"/>
    <property name="data" column="data" type="binary"/>
    <property name="creationDate" column="creationDate" type="string"/>
    <property name="createdBy" column="createdBy" type="string"/>
</class>

1 个答案:

答案 0 :(得分:0)

这似乎是oneToMany关系(许多测试用例属于一种类型)。检查如何在hibernate中执行此操作,例如在onetomany example中。

基本上,你的testCase对象应该有一个类型对象,而不仅仅是一个简单的字符串,这个对象应该有JPA或hibernate注释。

基本上,

您在TestCase中的类型应该是一个对象:

 private Type type;

您应该创建一个带有测试用例集的 Type 类:

 private Set<TestCases> testCases;

你的type.hbm.xml应该有:

<set name="testCases" inverse="true" cascade="all">
     <key column="TYPE_ID" not-null="true" />
     <one-to-many class="TestCase"/>
</set>

你的testcase.hmb.xml应该有:

<many-to-one name="type" class="Type"
        column="TYPE_ID" not-null="true"/>