在SCP Neo上使用HANA:如何使用JPA/Eclipselink创建HANA模式?

2020-09-10 14:47发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在使用JPA和EclipseLink作为提供程序的Java应用程序上工作,我想从那里创建表和存储它们的模式。 创建表可以通过以下方式正常工作:

 @Entity
 @Table(name =" customer")
 公共类客户实现Serializable {

    私有静态最终长serialVersionUID = 1L;

    @ID
    私人Long ID;
    私有字符串firstName;
    私有字符串lastName;

     公开客户(){
     }

     公共长getId(){
         返回ID;
     }

     公共无效setId(长ID){
         this.id = id;
     }

     公共字符串getFirstName(){
         返回firstName;
     }

     公共无效setFirstName(String firstName){
         this.firstName = firstName;
     }

     公共字符串getLastName(){
         返回lastName;
     }

     公共无效setLastName(String lastName){
         this.lastName = lastName;
     }
 } 

此后,将按照我的用户的默认架构中的预期创建表,然后可以使用它们。 当我自己创建一个架构并按以下方式在我的源代码中使用它时,也是有效的:

 @Table(name =" customer",schema =" shop")

将按照预期的那样在该架构中创建表,我可以使用它们。 问题是,如果我不自己创建架构并想要执行以下操作:

 @Table(name =" customer",schema =" shop")

这里将不会创建任何内容,而不是表而不是架构,并且我希望能够像创建表一样创建架构,这可能吗? 直到现在,我一直在努力使其工作

1)试图提供目录和架构,问题依然存在,甚至没有创建表。
2)找到了这个问题/问题,并且针对目标数据库使用了不同的值,问题仍然存在,甚至不是表 已创建
3)在Web和github上查找了示例,但在这些示例中仅提供了表名,而不提供模式

所以我希望有人能告诉我这是否可行以及如何实现,直到那之前我已经希望你度过一个愉快的周末。

亲切的问候

Maximilian

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在使用JPA和EclipseLink作为提供程序的Java应用程序上工作,我想从那里创建表和存储它们的模式。 创建表可以通过以下方式正常工作:

 @Entity
 @Table(name =" customer")
 公共类客户实现Serializable {

    私有静态最终长serialVersionUID = 1L;

    @ID
    私人Long ID;
    私有字符串firstName;
    私有字符串lastName;

     公开客户(){
     }

     公共长getId(){
         返回ID;
     }

     公共无效setId(长ID){
         this.id = id;
     }

     公共字符串getFirstName(){
         返回firstName;
     }

     公共无效setFirstName(String firstName){
         this.firstName = firstName;
     }

     公共字符串getLastName(){
         返回lastName;
     }

     公共无效setLastName(String lastName){
         this.lastName = lastName;
     }
 } 

此后,将按照我的用户的默认架构中的预期创建表,然后可以使用它们。 当我自己创建一个架构并按以下方式在我的源代码中使用它时,也是有效的:

 @Table(name =" customer",schema =" shop")

将按照预期的那样在该架构中创建表,我可以使用它们。 问题是,如果我不自己创建架构并想要执行以下操作:

 @Table(name =" customer",schema =" shop")

这里将不会创建任何内容,而不是表而不是架构,并且我希望能够像创建表一样创建架构,这可能吗? 直到现在,我一直在努力使其工作

1)试图提供目录和架构,问题依然存在,甚至没有创建表。
2)找到了这个问题/问题,并且针对目标数据库使用了不同的值,问题仍然存在,甚至不是表 已创建
3)在Web和github上查找了示例,但在这些示例中仅提供了表名,而不提供模式

所以我希望有人能告诉我这是否可行以及如何实现,直到那之前我已经希望你度过一个愉快的周末。

亲切的问候

Maximilian

付费偷看设置
发送
2条回答
Tong__Ming
1楼 · 2020-09-10 15:04.采纳回答

马克西米利安,

您是否已阅读本约翰·霍普金斯大学JEE课程上的第16章?

如果查看持久性配置,您会发现DDL生成仅与实体相关,而与其他数据库工件(例如Schema)无关。 因此,即使您会找到用于模式生成的设置(例如SCHEMA_GENERATION_CREATE_ACTION),它们也仅用于使用您自己的sql脚本创建表并插入数据-因此,它基本上用您自己的EclipseLink替换了DDL表生成 SQL命令。

该课程说明了如何使用Maven创建/删除/弹出表。 这样可以确保在启动单元测试时,无论应用程序执行什么操作,它都将以一致的方式找到数据库。

但是,对于集成测试和生产环境,应该在部署应用程序(包括模式)之前已经设置了此类数据库构件。

您可以尝试使用一种API来创建 Java中为您提供的模式-但我不鼓励使用它(仅仅是因为它要求您了解方言才能在模式上设置安全性,等等):

地图属性= new HashMap();
 properties.put(" javax.persistence.schema-generation.scripts.action","拖放");
 properties.put(" javax.persistence.schema-generation.scripts.drop-target"," jpa21-generate-schema-no-connection-drop.jdbc");
 properties.put(" javax.persistence.schema-generation.scripts.create-target"," jpa21-generate-schema-no-connection-create.jdbc");
    
 Persistence.generateSchema(" shop",properties); 

上面是在JUnit测试方案中将使用的内容-将创建数据库表,加载数据等-全部在shop模式中。 此示例摘自 EclipseLink Wiki 页面

最好的问候,
伊凡

打个大熊猫
2楼-- · 2020-09-10 15:11

嗨伊凡,

感谢您分享链接和您对答案的见识。 我猜测这是行不通的,但也许只是配置问题,我想念并想确保不是这种情况。 现在清除了! :)因此,我将自己创建模式,然后在我的JPA-Entites中使用它。 再次感谢您的时间和帮助!

问候

马克西米利安

一周热门 更多>