让我们假设我们在spring(4.2.7)中正确配置了由hibernate(4.3.11)支持的jpa.启用了Hibernate一级缓存.我们使用声明式交易.我们有OuterBean
@Service
public class OuterBean {
@Resource
private UserDao userDao;
@Resource
private InnerBean innerBean;
@Transactional(propagation = Propagation.NEVER)
public void withoutTransaction(){
User user = userDao.load(1l);
System.out.println(user.getName());//return userName
innerBean.withTransaction();
user = userDao.load(1l);
System.out.println(user.getName());//return userName instead of newUserName
}
}
Run Code Online (Sandbox Code Playgroud)
从OuterBean调用的InnerBean:
@Service
public class InnerBean {
@Resource
private UserDao userDao;
@Transactional
public void withTransaction(){
User user = userDao.load(1l);
user.setName("newUserName");
}
Run Code Online (Sandbox Code Playgroud)
}
user.getName()OuterBean 中的方法返回相同的值两次(第二次是在数据库中更新名称之后)是否正确?
换句话说,是否正确的行为@Transactional(propagation = Propagation.NEVER)为方法创建了hibernate会话withoutTransaction(),导致第二个调用user.getName()从hibernate读取第一级缓存而不是数据库?
编辑
为了更好地解释问题,我从hibernate会话的创建中附加了跟踪
TRACE org.hibernate.internal.SessionFactoryImpl$SessionBuilderImpl - Opening Hibernate Session. tenant=null, owner=org.hibernate.jpa.internal.EntityManagerImpl@c17285e …Run Code Online (Sandbox Code Playgroud) 任务“:Main.main()”执行失败。
进程'命令'/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/bin/java''以非零退出值1完成
这是一个使用 Gradle 的 java 项目。不确定这个错误意味着什么。
我想将以下子查询转换为使用hibernate子查询:
getCurrentSession().createQuery("from Employee where id in (select adminId from Department where adminId is not null)")
.list();
Run Code Online (Sandbox Code Playgroud)
雇员:
@ManyToOne
@JoinColumn(name = "fk_department_id", nullable = true)
private Department department;
Run Code Online (Sandbox Code Playgroud)部门:
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "fk_department_id")
private Set<Employee> employees = new HashSet<Employee>(0);
Run Code Online (Sandbox Code Playgroud)任何人都可以请给我一个这种转换的例子,因为我读了一些例子,我仍然无法弄清楚如何做到这一点.
假设我们已经创建了一种付款方式 - pm_xxx。当我们创建客户时,我们可以通过java代码将此方法作为默认付款方式附加到客户:
CustomerCreateParams.Builder customerCreateParamsBuilder = CustomerCreateParams.builder()
.setEmail(email)
.setPaymentMethod('pm_xxx');
Customer.create(customerCreateParamsBuilder.build());
Run Code Online (Sandbox Code Playgroud)
不幸的是,更新客户的相应 api 不可用。所以问题是在 Stripe 中更新客户默认付款方式的首选方式是什么?
编辑:基于@karllekko 的回答,因为我的用例是定期付款,所以我结合了 2 个操作:将客户附加到付款方式:
paymentMethod.attach(PaymentMethodAttachParams.builder().setCustomer(customer.getId()).build());
Run Code Online (Sandbox Code Playgroud)
并为客户发票设置默认付款方式:
customer.update(CustomerUpdateParams.builder().setInvoiceSettings(CustomerUpdateParams.InvoiceSettings.builder().setDefaultPaymentMethod(token).build()).build());
Run Code Online (Sandbox Code Playgroud) 我没有找到在 sh 脚本中使用 jenkins 提供的 BUILD_NUMBER 的方法。我读了一些类似问题的答案,但似乎没有任何帮助。
node {
echo "Build number 1 $BUILD_NUMBER"
// output ok
stage('stage1') {
echo "Build number 2 $BUILD_NUMBER"
// output ok
def BUILD_NUMBER = "$BUILD_NUMBER"
withCredentials([sshUserPrivateKey(credentialsId: 'github-rsa-key', variable: 'RSAKEY')]) {
echo "Build number 3 " + BUILD_NUMBER
// output ok
echo "Build number 4 $BUILD_NUMBER"
// output ok
// -----------------
sh 'echo $BUILD_NUMBER' // NullPointer
sh "echo $BUILD_NUMBER" // NullPointer
sh "echo \$BUILD_NUMBER" // NullPointer
sh "echo BUILD_NUMBER" // NullPointer
withEnv(["BUILD_NUMBER=BUILD_NUMBER"]) {
sh "echo …Run Code Online (Sandbox Code Playgroud) 我正在使用 Stripe 实现 Subscription*(已准备好 SCA)。我尝试处理https://stripe.com/docs/billing/subscriptions/payment#handling-action-required。在 Stripe 端创建订阅后,我得到了上面文档中的答案:
{
"id": "sub_XXXXXXXXXXXXXXXXXXX",
"object": "subscription",
"status": "incomplete",
...
"latest_invoice": {
...
"payment_intent": {
"status": "requires_action",
...
"next_action": {
"type": "use_stripe_sdk",
...
},
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据文档https://stripe.com/docs/api/payment_intents/object#payment_intent_object-next_action-type
next_action.type可以有两个值redirect_to_url和use_stripe_sdk
所以我的问题是如何获取next_action.type = redirect_to_url(而不是use_stripe_sdk)以及如何强制填充条纹next_action.redirect_to_url(因为我想在我的 UI 中自己处理它)?
* SO 上已经有一个类似的问题:https : //stackoverflow.com/questions/56490033/how-to-handle-use-stripe-sdk-through-php 但我的情况是创建我没有的订阅控制 PaymentIntent
我JpaSpecificationExecutor用于创建自定义查询.如何为以下SQL创建规范?
select * from employee e, address a where e.id=23415 and e.name="Deepak" and a.city="Leeds";
Run Code Online (Sandbox Code Playgroud)
Java类:
public static Specification<Employee> searchEmployee(final Map<String,String> myMap) {
return new Specification<Employee>(){
@Override
public Predicate toPredicate(Root<Employee> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
//Need to query two tables Employee and Address
}
}
Run Code Online (Sandbox Code Playgroud) 我想将maven阶段分开为build、test和deploy。
问题:我在这里把事情复杂化了吗?我是否应该只使用一个mvn clean package阶段,因为compile和test是在阶段期间由 Maven 隐式执行的package?
.gitlab-ci.yml:
stages:
- build
- test
- deploy
build:
stage: build
script: mvn clean compile
test:
stage: test
script: mvn clean test
deploy:
stage: deploy
script: mvn clean package -Dmaven.test.skip=true
#...continue with docker deployment...
Run Code Online (Sandbox Code Playgroud) 我正在使用管道设置参数化 jenkins 作业。我需要修剪修剪参数有什么建议吗?
在 jenkins 的新版本中,我可以获得参数。但是我不能修改参数。如果我使用 setValue(),它会给我 unsupportedException。
在 Stripe 支付系统中,对于下载 Invoice.pdf,我们可以Invoice通过 Stripe API 通过其 id 检索对象,然后检查字段Invoice.invoice_pdf
请参阅https://stripe.com/docs/api/invoices/object#invoice_object-invoice_pdf
有类似的方式获取收据吗?