相关疑难解决方法(0)

MySQL上的@GeneratedValue多态抽象超类

在使用Hibernate和MySQL的Spring MVC应用程序中,我有一个抽象的超类BaseEntity,它管理模型中所有其他实体的ID值.该id领域使用@GeneratedValue.每当我的代码试图保存任何扩展的子类时,我都会遇到问题BaseEntity.这个问题带有的选择GenerationType@GeneratedValue.

在我的代码中BaseEntity尝试保存到底层MySQL数据库的子类的每个地方,我收到以下错误:

ERROR SqlExceptionHelper - Table 'docbd.hibernate_sequences' doesn't exist  
Run Code Online (Sandbox Code Playgroud)

我已经在SO和谷歌上阅读了很多关于此的帖子,但是他们要么处理其他数据库(不是MySQL),要么他们不处理抽象超类.我无法通过使用来解决问题,GenerationType.IDENTITY因为我使用抽象超类来管理id模型中所有实体的字段.同样,我不能使用,GenerationType.SEQUENCE因为MySQL不支持序列.

那么我该如何解决这个问题呢?

这是以下代码BaseEntity.java:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    protected Integer id;

    public void setId(Integer id) {this.id = id;}
    public Integer getId() {return id;}

    public boolean isNew() {return (this.id == null);}

}
Run Code Online (Sandbox Code Playgroud)

以下是扩展的实体之一的代码示例BaseEntity:

@Entity
@Table(name = "ccd")
public class …
Run Code Online (Sandbox Code Playgroud)

java mysql database hibernate jpa

6
推荐指数
1
解决办法
4974
查看次数

不能在JPA中使用策略TABLE_PER_CLASS使用标识列密钥生成?

这个问题与此主题中提到的问题有关.我在MySQL上使用JPA时也遇到了同样的问题.只有当我将生成策略更改为TABLE时,我才能解决它.

但问题是,这个问题背后的原因是什么以及为什么将策略更改为TABLE是解决方案(这在线程中仍然没有答案)?

inheritance jpa

5
推荐指数
1
解决办法
3247
查看次数

如何结合 TABLE_PER_CLASS 和 GenerationType.IDENTITY

亲爱的未来读者:在完成Sannes 的回答和他提供的链接之后,我决定改用 Sequence。较新的 Hibernates 注意它也适用于 MySQL。


我有一个abstract类,其中包含我希望在所有实体中拥有的一些基本值(例如 ID、创建日期、创建用户等)。目前,我在为每个具体类拥有一张表并使其 id 工作的组合而苦苦挣扎。

似乎我可以为每个班级设置一个表,也可以在一个地方设置 ID,但不能同时设置两者。这对我来说似乎很奇怪而且不太可能,所以我想确保情况确实如此。

可能相关的版本:hibernate 5、mysql 5.5、java 1.8、spring 4.3。

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@MappedSuperclass
public abstract class GeneralData implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false)
    protected int id;
    protected String name;

    // getters, setters, constructors, etc.
}
Run Code Online (Sandbox Code Playgroud)

示例子类:

@Entity
public class ExampleClass extends GeneralData {
    // own values, constructors, getters, setters, etc.
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

Cannot use identity column key generation with <union-subclass> mapping for: org.example.ExampleClass …
Run Code Online (Sandbox Code Playgroud)

java mysql spring persistence hibernate

5
推荐指数
1
解决办法
2055
查看次数

使用FluentNHibernate进行每类继承的表 - 身份生成

我有一组来自不同来源的付款对象,我想在NHibernate中使用TPC继承.所有这些对象的基础是支付处理器(因此所有对象都具有一致的格式),但是数据库中没有基类的表示.我想我的映射已经解决了,除了我在尝试插入时抛出异常的事实 - "不能使用带有<union-subclass>映射的身份列密钥生成:<EntityName>"

类别:

public class BasePayment
{
    public virtual int Id { get; set; }
    public virtual PaymentSource Source { get; set; }
    public virtual DateTime Date { get; set; }
    public virtual decimal Amount { get; set; }
}

public class SubPayment : BasePayment
{
}
Run Code Online (Sandbox Code Playgroud)

映射:

public class BasePaymentMap : ClassMap<BasePayment>
{
    public BasePaymentMap()
    {
        UseUnionSubclassForInheritanceMapping();
        DiscriminateSubClassesOnColumn("Source");
        Id(m => m.Id);
        Map(m => m.Source);
        Map(m => m.Amount);
        Map(m => m.Date);
    }
}

public class SubPaymentMap : SubclassMap<SubPayment>
{ …
Run Code Online (Sandbox Code Playgroud)

c# fluent-nhibernate

2
推荐指数
1
解决办法
2505
查看次数