java - Hibernate 数据库映射

标签 java hibernate

首先,我对 Hibernate 有点陌生。为了了解我在项目中使用的技术。我正在尝试映射以下数据库:

Campaign
  campaignId(+)
  name

Promotion
  campaignId(+)
  discount(+)
  product
  message

我在这两种情况下都用 (+) 表示主键。 Promotion 中的“campaignId”是 Campaign 的外键,用于建模 1:m 映射(一个 Campaign 有许多 Promotions)。使用注释我不知道如何做到这一点。

我真的不想在促销表中添加促销Id,因为它会使数据处理变得很麻烦。当然,这使得桥接表有点棘手。我在使用同时也是主键一部分的外键时也遇到问题。

这可能有映射吗?

<小时/>

好的,我成功了。有点。必须检查坚持是否真的有效。我做了以下事情:

@Entity
@Table(name = "CAMPAIGNS")
@Audited
public class CampaignEntity {
    private int campaignId;
    private String name;
    private List<PromotionEntity> promotions;

    public CampaignEntity(int campaignId, String name) {
        this.campaignId = campaignId;
        this.name = name;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "cmp_id")
    public int getCampaignId() {
        return campaignId;
    }

    public void setCampaignId(int campaignId) {
        this.campaignId = campaignId;
    }

    // Campaign name here... left out to save space

    @OneToMany
    @JoinColumn(name = "cmp_id")
    public List<PromotionEntity> getPromotions() {
        return promotions;
    }

    public void setPromotions(List<PromotionEntity> promotions) {
        this.promotions = promotions;
    }
}

Promotion 是一个普通映射(毕竟不使用嵌入),其字段为:campaignId、discount、message。 (它也没有 @ManyToOne 注释。)

这有意义吗?

最后,这将是一等奖:如您所见,我正在使用 Envers 来审核整个事情。上面创建了一个相当丑陋的“CampaignEntity_PromotionEntity_AUD”表。我知道这是必要的,但如何将其重命名为 CAMPAIGN_PROMOTION_AUD 呢?

谢谢大家!

<小时/>

我在一个孤独的网站上得到了答案,该网站深深隐藏在 Hibernate 的 Jira 错误跟踪网站的遥远角落:https://hibernate.onjira.com/browse/HHH-3729 .

答案当然是使用@AuditJoinTable(name = "CAMPAIGN_PROMOTION_AUD")。

最佳答案

这是一对多关系及其逆关系的基本示例。

public class Campaign
{
    @OneToMany(mappedBy = "campaign)
    private List<Promotion> promotions;
}

public class Promotion
{
    @ManyToOne
    private Campaign campaign;
}

关于java - Hibernate 数据库映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9873413/

相关文章:

java - 构建 war 文件时出现编译错误

java - 如何使用@SpringBootApplication和@Configuration、数据源

mysql - 无法插入列名称为 from 、 to 的表

java - hibernate与Mysql的连接

java - 带有 AES 的 CBC : Encrypting in Perl and Decrypting in Java

java - 如何从 JTable txt 文件创建字符串?

java - Jackson ObjectCodec 转字符串 json

postgresql - 如何将 numeric(13, 3)[] 数据库列映射到 Hibernate 实体字段?

sql - 在 hibernate 中映射到 varchar 和 nvarchar

hibernate - 调试 Hibernate session /事务错误的好主意?