我们对Oracle数据库使用Hibernate Annotations 3.4.0GA和Hibernate Core 3.3.2.GA(也称为当前稳定版本)
我们有一个一对多的映射,其中base = 1,在一段时间内工作正常,但上周我们在数据库中发现了一些条目,其中索引列包含值0,这导致了各种问题.
所以我的问题是:当用base = 1映射时,有没有人知道如何将值0引入一对多关系的索引列?可能与使用泛型或MappedSuperclass有关.
请注意,代码相当复杂,因为还涉及继承.
以下是课程的相关部分:
// SuperClass of the One side
@MappedSuperclass
public abstract class AbstractReihung<Tp, Tw, Te extends AbstractReihungElement<Tp, Tw>>
{
@OneToMany(cascade = CascadeType.ALL)
@Cascade(
{
org.hibernate.annotations.CascadeType.ALL,
org.hibernate.annotations.CascadeType.DELETE_ORPHAN
})
@JoinColumn(name = "parent_id", nullable = false)
@IndexColumn(name = "position", base = 1, nullable = false)
private List<Te> elements = new ArrayList<Te>();
}
// Super Class of the Many side
@MappedSuperclass
public abstract class AbstractReihungElement<Tp, Tw> extends AbstractDbObject
{
@ManyToOne
@JoinColumn(name = "parent_id", …Run Code Online (Sandbox Code Playgroud) 我有一个"Offer"类(MapperSuperclass)和另外两个扩展它的类,"PrivateOffer"和"PublicOffer".
我遇到的问题是,当我运行"doctrine:generate:entities"命令时,"PrivateOffer"和"PublicOffer"这两个类都填充了与MappedSuperclass"Offer"类相同的属性,以及它的getter和setter方法.
如果我删除它们并仅在"Offer"类中使用它们,那么"doctrine:schema:update"可以正常工作,但是我需要再次运行"doctrine:generate:entities",因此每次扩展类都会丢失它.
为什么"doctrine:generate:entities"会复制两个类中的所有属性和setter/getter方法,如果它们扩展了MappedSupperclass?
谢谢你们 :)
OfferClass:
namespace Pro\JobBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Offer
*
* @ORM\MappedSuperclass()
*/
class Offer
{
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
protected $name;
....more properties...
}
Run Code Online (Sandbox Code Playgroud)
PrivateOfferClass:
<?php
namespace Pro\JobBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* PrivateOffer
*
* @ORM\Table(name="private_offer")
* @ORM\Entity
*/
class PrivateOffer extends Offer
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* Get id
* …Run Code Online (Sandbox Code Playgroud) 具有:
@MappedSuperclass
class Superclass {
@Id
@Column(name = "id")
protected long id;
@Column(name="field")
private long field;
}
Run Code Online (Sandbox Code Playgroud)
和
@Entity
class Subclass extends Superclass {
}
Run Code Online (Sandbox Code Playgroud)
如何使用@GeneratedValue注释继承的id,使用@Index在Subclass中注释?
我需要从Country到Superclass Place(@MappedSuperclass)的OneToMany关联.它可以是双向的.我需要像@OneToAny这样的东西......
@MappedSuperclass
public class Place {
private String name;
private Country country;
@Column
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToOne
@JoinColumn(name="country_id")
public Country getCountry() {
return country;
}
public void setCountry(Country country) {
this.country = country;
}
}
Run Code Online (Sandbox Code Playgroud)
国家:
@Entity
public class Country {
private long id;
private String name;
private List<Place> places;
@Any(metaColumn = @Column(name = "place_type"), fetch = FetchType.EAGER)
@AnyMetaDef(idType = "integer", metaType = "string", metaValues …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一系列对象,这些对象都存储在单独的表中,但是所有这些表上都有一组共同的字段。我希望 Hibernate 对所有这些表进行联合,但不包括超类作为表。
当我只用 @MappedSuperclass @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 注释超类时
...hibernate 将为超类的 (n) 个子类型分别运行 (n) 个查询。
当我删除@MappedSuperclass 并将@Entity 放在超类上时,Hibernate 将执行花哨的 UNION 查询,但将超类作为表包含在 UNION 中(超类没有表)。
如何在不使父类成为@Entity(因为它不是实体,因此没有表)的情况下将所有子类(不是单独的查询)一起使用 UNION?
union annotations hibernate table-per-class mappedsuperclass
我有一个@MappedSuperclass AbstractEntity,我用于所有@Entity类.只要超类与我的实体在同一个Eclipse项目中,它就可以完美地工作.但是因为我在几个项目中重用了这个超类,所以我只想把它分解成自己的JAR文件.当我这样做(当然我将JAR文件添加到构建路径中)时,Eclipse会在我的每个@Entity类上给出错误:
实体没有定义主键属性.
Eclipse突出显示@Entity注释作为错误的来源.当然,所有类都继承自此AbstractEntity.两个项目中的包名称相同.JAR项目具有所有必需的构建路径 - 包含AbstractEntity的JAR文件项目中没有错误.
当我将它部署到我的应用服务器(JBoss 7.1)时,它工作正常.这让我觉得它只是一个错误地识别错误的Eclipse问题.
抽象实体:
package com.xyc.abc;
import java.io.Serializable;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
@MappedSuperclass
public abstract class AbstractEntity implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
简单实体类示例:
@Entity
public class TestEntity extends AbstractEntity {
...
}
Run Code Online (Sandbox Code Playgroud)
我已经看到一些其他帖子说问题可能是超类中的注释是在getter而不是在字段上 - 如果你的实体中没有其他JPA注释,这只是一个问题,我这样做.有任何想法吗?
我正在尝试使用TABLE_PER_CLASS策略创建继承,但我想为每个表创建不同的主键是否可能?
我有一个类Register,它有数百万个实例,其中一些实例是"特殊的",并且对于它们的列和额外的列有不同的规则.
@MappedSuperclass
public abstract class Register {
@Id
@Column(nullable = false, unique = true, updatable = false)
private Long userId;
private Date checked;
@Column(nullable = false)
private RegisterState tipo;
}
@Entity
@AttributeOverrides({ @AttributeOverride(name = "userId", column = @Column(nullable = false, unique = false, updatable = false)) })
public class PotencialRegister extends Register implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(length = 64, nullable = false, unique = false)
private String referer;
}
Run Code Online (Sandbox Code Playgroud)
对于基本注册我不需要一个Id属性,因为我有一个独特的列,但该列不是唯一的专业机构,所以我增加了一个额外的属性.
问题是hibernate使用父id创建了一个复合主键(生成的模式是):
create table …Run Code Online (Sandbox Code Playgroud) 我想在一个组共同映射interface,但我不能使用abstract superclass,因为我已经实体扩展另一个class。所以我需要一个像下面这样的界面:
@MappedSuperclass
public interface NamedEntity {
@Column(name = "name")
String getName();
void setName(String name);
}
Run Code Online (Sandbox Code Playgroud)
我想像下面这样使用它:
public class Person {
private Long id;
private String name;
public Long getId(){ return id; }
public void setId(Long id){ this.id = id; }
public String getName() { return name; }
public void setName(String name){ this.name = name; }
}
@Entity
@Table(name = "person_entity")
public class PersonEntity extends Person implements NamedEntity {
@Id
@GeneratedValue
@Column(name = "id") …Run Code Online (Sandbox Code Playgroud) java ×6
hibernate ×5
annotations ×3
jpa ×3
inheritance ×2
one-to-many ×2
doctrine ×1
eclipse ×1
entity ×1
generics ×1
symfony ×1
union ×1