这是我的班级结构:
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) 我正在使用 hibernate 注释,为此hibernate.cfg.xml我需要添加这样的注释类, <mapping class="p.Customer" />这里p是包名称,客户是带注释的 bean。
假设我有 20 个此类带注释的类,这意味着我必须为该类编写 20 条映射行。在 Spring 中,有一个属性packageToScan可用于注册/加载指定包中的所有 hibernate 带注释的类。
由于我没有使用 Spring,我们可以在 Hibernate 中使用相同的功能吗?
我还发现了一个标签hibernate.cfg.xml <mapping package="" />,一开始我认为这对我有用,但它没有用。不明白这个属性有什么用。
我正在使用 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) 我的休眠注释一直有问题。我有两个类之间的双向关系。这是映射(感谢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) 好吧,这可能是一个远景,但这里有.
在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
我将 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) 我从typedQuery对象获取resultList.我从该列表中获取第一个对象.
例如. LoginAttempt loginAttempt = loginAttempts.get(0);
何时,我更新此对象并调用entityManager.merge(loginAttempt);它已成功更新.
但是当我要删除这个对象时,它给了我异常,即. java.lang.IllegalArgumentException: Removing a detached instance.
任何建议.谢谢 :)
实际上,我只想删除.我只是提到合并,因为我感到困惑,合并正在工作,但删除不起作用...
我正在使用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) 请帮助解决错误:“字段列表”中的未知列“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) 我有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) hibernate ×9
java ×5
spring ×4
annotations ×2
jpa ×2
inheritance ×1
jpa-2.0 ×1
named-query ×1
spring-boot ×1
sql ×1