小编eps*_*ero的帖子

Spring-Data Jpa 继承:在子实体中保留实体 ID

我正在处理几个具有树状结构的实体,它们变得越来越复杂,因此我决定为其创建一个抽象类,以便代码更易于维护:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class TreeStructure<T extends TreeStructure>
{
    @ManyToOne
    protected  T parent;

    @OneToMany(mappedBy = "parent", fetch = FetchType.LAZY)
    protected Set<T> children = new HashSet<>();
    //...
Run Code Online (Sandbox Code Playgroud)

然后我有两个扩展它的实体:

@Entity(name = "TreeStructureOne")
public class TreeStructureOne extends TreeStructure<TreeStructureOne>
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @JsonProperty("TreeStructureOne_id")
    private long id;
Run Code Online (Sandbox Code Playgroud)

我基本上希望数据库完全不知道这种TreeStructure抽象,并保存每个实体表中的所有字段并期望InheritanceType.TABLE_PER_CLASS处理它。但看来我至少需要Id在实体中定义,否则我得到:TreeStructure

Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: TreeStructure

我不想将 an 添加ID到抽象类中,因为这会在数据库中生成三个表,名为:HT_TREE_STRUCTUREHT_TREE_STRUCTURE_ONE并且每个表HT_TREE_STRUCTURE_TWO …

java spring-data spring-data-jpa spring-boot

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

合并查询插入但不在Oracle上更新

我在Spring中针对Oracle 11g数据库的@SQLInsert注释中获得了此查询,虽然它正确插入但它不会更新值但不会引发错误.

有任何想法吗?如果没有,任何其他方式获得相同的行为?

merge INTO ngram sn
USING(SELECT ? AS frequency,
             ? AS occurrences,
             ? AS ngram
      FROM   dual) src
ON (sn.ngram = src.ngram)
WHEN matched THEN
  UPDATE SET sn.occurrences = sn.occurrences + src.occurrences,
             sn.frequency = sn.frequency + 1
WHEN NOT matched THEN
  INSERT (ngram,
          frequency,
          occurrences)
  VALUES (src.ngram,
          src.frequency,
          src.occurrences) 
Run Code Online (Sandbox Code Playgroud)

Update1:我在Java中添加了Entity def以便澄清.

@Entity(name = "NGRAM")
public class Ngram
{
    @Id
    @JsonProperty("ngram")
    private String ngram;

    @JsonProperty("frequency")
    @Column(name = "frequency")
    private int frequency;

    @JsonProperty("occurrences")
    @Column(name = "occurrences")
    private …
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle11g spring-data-jpa

5
推荐指数
0
解决办法
173
查看次数