标签: hibernate-annotations

Hibernate 映射中 2 级继承的问题

这是我的班级结构:

class A
class B extends A
class C extends A
class D extends C
class E extends C
Run Code Online (Sandbox Code Playgroud)

这是我的映射(为简洁起见,省略了类体):

A类:

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@MappedSuperclass
@DiscriminatorColumn(
        name="className",
        discriminatorType=DiscriminatorType.STRING
)
@ForceDiscriminator
public abstract class A
Run Code Online (Sandbox Code Playgroud)

B类:

@Entity
@DiscriminatorValue("B")
public class B extends A
Run Code Online (Sandbox Code Playgroud)

C类:

@Entity
@DiscriminatorValue("C")
@MappedSuperclass
@DiscriminatorColumn(
        name="cType",
        discriminatorType=DiscriminatorType.STRING
)
@ForceDiscriminator
public abstract class C extends A
Run Code Online (Sandbox Code Playgroud)

D类:

@Entity
@DiscriminatorValue("D")
public class D extends C
Run Code Online (Sandbox Code Playgroud)

E类:

@Entity
@DiscriminatorValue("E")
public class E extends C
Run Code Online (Sandbox Code Playgroud)

我有一个包含一组 A 的 F 类:

@Entity
public class …
Run Code Online (Sandbox Code Playgroud)

java hibernate hibernate-annotations

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

在 Hibernate 中加载多个带注释的类

我正在使用 hibernate 注释,为此hibernate.cfg.xml我需要添加这样的注释类, <mapping class="p.Customer" />这里p是包名称,客户是带注释的 bean。

假设我有 20 个此类带注释的类,这意味着我必须为该类编写 20 条映射行。在 Spring 中,有一个属性packageToScan可用于注册/加载指定包中的所有 hibernate 带注释的类。

由于我没有使用 Spring,我们可以在 Hibernate 中使用相同的功能吗?

我还发现了一个标签hibernate.cfg.xml <mapping package="" />,一开始我认为这对我有用,但它没有用。不明白这个属性有什么用。

java hibernate hibernate-annotations

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

是否有与 spring-data-jpa 一起使用的新 @Type 注释?

我正在使用 SQL Server 和 Spring Data JPA。我正在尝试让该uniqueidentifier类型正常工作,但它似乎用作uuid_byte类型而不是uuid_char. 我看到其他较旧的帖子说要使用注释@Type(type = "uuid_char"),但它似乎不存在于 spring-data-jpa 包中。

当搜索这个臭名昭著的@Type注释时,我只能找到一些东西org.hibernate:hibernate-annotations。最后一次更新是在 2010 年。这仍然是建议的方式吗?如果是这样,是否有一个包含此内容的 spring 包,这样我就不会遇到兼容性问题?

当尝试使用它时,我收到以下错误:

java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108)
at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:106)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
at …
Run Code Online (Sandbox Code Playgroud)

hibernate-annotations spring-data-jpa spring-boot

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

具有相同标识符值的不同对象已经与保存时的会话错误相关联

可能的重复:
Spring + Hibernate:具有相同标识符值的不同对象已经与会话相关联

我的休眠注释一直有问题。我有两个类之间的双向关系。这是映射(感谢axtavt):

@Entity 
public class Receipt implements Serializable { 
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "receipt")
    private List<Collection> collections; 
    ...
}      

@Entity 
public class Collection implements Serializable { 
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    @ManyToOne 
    @JoinColumn(name="ReceiptId") 
    private Receipt receipt; 
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用以下收藏品列表保存我的收据时:

Receipt r = new Receipt();
List<Collection> cols = new ArrayList<Collection>();
cols.add(new Collection());
r.setCollections(cols);
getHibernateTemplate().save(r);
Run Code Online (Sandbox Code Playgroud)

它生成此错误:

org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session: …
Run Code Online (Sandbox Code Playgroud)

spring annotations hibernate hibernate-annotations

4
推荐指数
1
解决办法
4万
查看次数

除了SINGLE_TABLE之外,在使用任何其他Hibernate继承策略时JVM崩溃

好吧,这可能是一个远景,但这里有.

在Java(JRE 1.6.0_26-b03)中,我有两个类SuperControl及其子类SubControl.它们都需要是持久对象,而我正在使用Hibernate Annotations来实现这一点.我有大约210个正确持久的类.除了一个不是.

我的问题是SubControl拒绝以任何方式继承SINGLE_TABLE.当我说"拒绝"时,我的意思是整个JRE崩溃了.

这有点问题,因为我真的更喜欢SuperControl成为映射的超类SubControl.SuperControl也可以是一个持久的实体.奇怪的是,我在其他地方的代码中有一个完全并行的层次结构,它可以正常工作.

这就是我要的:

@Entity
@MappedSuperclass
public class SuperControl extends ItsSuperClass {
  // ...
}

@Entity
public class SubControl extends SuperControl {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

但它因错误而爆炸

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (c1_Optimizer.cpp:271), pid=5456, tid=1260
#  guarantee(x_compare_res != Constant::not_comparable) failed: incomparable constants in IfOp
#
# JRE version: 6.0_26-b03
# …
Run Code Online (Sandbox Code Playgroud)

java inheritance hibernate single-table-inheritance hibernate-annotations

4
推荐指数
1
解决办法
4334
查看次数

Hibernate 会话工厂未找到在 DAO 注释中定义的 NamedQuery

我将 Spring 与 Hibernate 一起使用。在我的 DAO 中,我定义了一个会话工厂找不到的 NamedQuery,尽管我已将该 DAO 的包添加到了 packagesToScan。

我的道:

/**
 * 
 */
package org.lalala.service.mytest;

import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;


import  org.lalala.objects.Unit;


@NamedQueries
({
    @NamedQuery
    (
        name="unit.findById",
        query="from Unit u where u.unitid = :unitId"
    )
})
public class MyTestDaoImpl implements MyTestDao
{

    private SessionFactory sessionFactory;


    public MyTestDaoImpl(SessionFactory sessionFactory)
    {
        super();
        this.sessionFactory = sessionFactory;
    }



    /* (non-Javadoc)
     * @see org.lalala.service.mytest.MyTestDao#getRandomUnit()
     */
    @Override
    public Unit getRandomUnit()
    {
        long unitid = 2891;
        try {
            Session session …
Run Code Online (Sandbox Code Playgroud)

spring hibernate jpa named-query hibernate-annotations

4
推荐指数
1
解决办法
7135
查看次数

JPA:删除分离的实例

我从typedQuery对象获取resultList.我从该列表中获取第一个对象.

例如. LoginAttempt loginAttempt = loginAttempts.get(0);

何时,我更新此对象并调用entityManager.merge(loginAttempt);它已成功更新.

但是当我要删除这个对象时,它给了我异常,即. java.lang.IllegalArgumentException: Removing a detached instance.

任何建议.谢谢 :)

实际上,我只想删除.我只是提到合并,因为我感到困惑,合并正在工作,但删除不起作用...

spring hibernate jpa hibernate-annotations jpa-2.0

4
推荐指数
1
解决办法
1万
查看次数

我提交事务时违反了完整性约束

我正在使用Hibernate 4.0 Final和ojdbc6来开发我的Web应用程序.除非我尝试插入新的父/子关系,否则一切都很好.首先,这些是实体:

@Entity
@Table(name = "EMPLOYEE")
public class Employee implements Serializable, Cloneable {
    @Id
    @SequenceGenerator(name = "seq", sequenceName = "P_SEQ")
    @GeneratedValue(generator = "seq")
    @Column(name = "ID_EMPLOYEE")
    private long idEmployee;
    ......
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "employee", orphanRemoval = true)
    @Fetch(FetchMode.SELECT)
    @BatchSize(size = 10)
    private Set<Address> addresses;
    ......
}

@Entity
@Table(name = "ADDRESS")
public class Address implements Serializable, Cloneable, Comparable {    
    @Id
    @SequenceGenerator(name = "seq", sequenceName = "P_SEQ")
    @GeneratedValue(generator = "seq")
    @Column(name = "ID_ADDRESS")
    private long idAddress; …
Run Code Online (Sandbox Code Playgroud)

annotations hibernate hibernate-annotations

4
推荐指数
1
解决办法
1万
查看次数

错误:“字段列表”中的未知列“this_.idHardDrives”

请帮助解决错误:“字段列表”中的未知列“this_.idHardDrives”。无法理解数据库中存在字段“idHardDrives”。

硬盘驱动器.java

package main.java.table;


import javax.persistence.*;

@Entity
@Table(name = "hardDrives")
public class HardDrives {

@Id @GeneratedValue
@Column(name = "idHardDrives")
private int idHardDrives;
@Column(name = "name")
private String nameHardDrives;
@Column(name = "capacity")
private int capacity;
@Column(name = "interface")
private String interFace;
@Column(name = "connectionType")
private String connectionType;
@ManyToOne
@JoinColumn (name = "idBrand")
private Brands brands;




public int getIdHardDrives() {
    return idHardDrives;
}

public void setIdHardDrives(int idHardDrives) {
    this.idHardDrives = idHardDrives;
}

public String getNameHardDrives() {
    return nameHardDrives;
}

public void setNameHardDrives(String …
Run Code Online (Sandbox Code Playgroud)

java hibernate hibernate-annotations

4
推荐指数
1
解决办法
1万
查看次数

@Where子句在休眠联接查询中不起作用

我有2个带有@Where注释的实体。第一个是类别;

@Where(clause = "DELETED = '0'")
public class Category extends AbstractEntity
Run Code Online (Sandbox Code Playgroud)

具有以下关系:

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "category")
private Set<SubCategory> subCategories = Sets.newHashSet();
Run Code Online (Sandbox Code Playgroud)

第二个实体是SubCategory;

@Where(clause = "DELETED = '0'")
public class SubCategory  extends AbstractEntity
Run Code Online (Sandbox Code Playgroud)

并包含对应关系;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CATEGORY_ID")
private Category category;
Run Code Online (Sandbox Code Playgroud)

每当我调用以下Dao方法时;

@Query(value = "select distinct category from Category category join fetch category.subCategories subcategories")
public List<Category> findAllCategories();
Run Code Online (Sandbox Code Playgroud)

我得到以下sql查询;

    select
        distinct category0_.id as id1_3_0_,
        subcategor1_.id as id1_16_1_,
        category0_.create_time as create2_3_0_,
        category0_.create_user as create3_3_0_,
        category0_.create_userip as …
Run Code Online (Sandbox Code Playgroud)

java sql spring hibernate hibernate-annotations

4
推荐指数
2
解决办法
3960
查看次数