RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-385867

Zhenyria's questions

Martin Hope
Zhenyria
Asked: 2023-11-10 11:34:15 +0000 UTC

如何从 Docker 容器访问网络目录?

  • 6

我有一个包含多台网络打印机的网络。这些打印机可在如下路径中使用:(\\ServerName\PrinterName 对于 Windows)。

我正在编写一个应用程序Java,只需将文件写入网络目录即可发送要打印的文档。

File fileToPrint = new File(fileName);
File printerFolder = new File(printerName);

try (FileInputStream fis = new FileInputStream(fileToPrint);
     FileOutputStream fos = new FileOutputStream(printerFolder)) {
    IOUtils.copy(fis, fos);
} catch (IOException e) {
    throw new RuntimeException(e);
}

当我在位于网络上的计算机(Windows)上本地运行该程序时,此代码效果很好。Docker但是,如果我在 中运行 -container,这将停止工作wsl。

我的问题是:如何从容器访问网络目录Docker (它用作图像的基础linux)?

java
  • 2 个回答
  • 48 Views
Martin Hope
Zhenyria
Asked: 2022-09-16 18:02:27 +0000 UTC

查询 SELECT SUM 时如何避免 DECIMAL 舍入?

  • 0

MariaDB 10.6.

创建了以下函数:

CREATE
    FUNCTION count_sum()
    RETURNS DECIMAL(19, 3)
BEGIN
    DECLARE result DECIMAL DEFAULT 0.000;

    SET result = (SELECT SUM(ba.amount) FROM billing_account AS ba);
    RETURN result;
END;

这里的字段billing_account.amount是 type DECIMAL(19, 3)。但是,作为函数调用的结果,我得到了一个四舍五入的整数值。如何避免四舍五入以获得带分数的确切数字?

sql
  • 0 个回答
  • 0 Views
Martin Hope
Zhenyria
Asked: 2022-08-17 12:34:39 +0000 UTC

临时表何时被擦除?

  • 0

我与MariaDB 10.6. 创建了一个存储过程,其中创建了一个临时表:

CREATE
    DEFINER = root@localhost PROCEDURE my_procedure()
BEGIN
    START TRANSACTION;

    CREATE TEMPORARY TABLE IF NOT EXISTS my_temp_table AS (SELECT id FROM some_table);

    # some logic

    COMMIT;
END;

我的印象是这个表在程序完成后并没有立即删除,因为我在使用它时遇到了一些问题。在创建表之前删除表后,所有错误都消失了:

DROP TABLE IF EXISTS my_temp_table;
CREATE TEMPORARY TABLE IF NOT EXISTS my_temp_table AS (SELECT id FROM some_table);

TEMPORARY TABLE问题是:如果我们在一个过程中创建它,究竟什么时候会被删除?

该网站MariaDB说:

使用 TEMPORARY 关键字创建仅对当前会话可用的临时表。会话结束时会删除临时表。临时表名称特定于会话。

但是程序完成后不应该关闭会话吗?

sql mysql
  • 1 个回答
  • 28 Views
Martin Hope
Zhenyria
Asked: 2022-07-12 20:33:47 +0000 UTC

什么技术可以以这种方式转换文本?

  • 4

有大量的方法需要以某种方式重写。例如,这是原始方法:

/**
 * Finds all
 * @param id    the id
 * @param codes list of codes
 * @return entities
*/
@GET
@Path("/get")
@Produces(APPLICATION_JSON)
public List<Entity> get(@QueryParam("id") Integer id, @QueryParam("barcodes") List<Long> codes) {
  return entityBean.findByIdAndCodes(id, codes);
}

应该这样重写:

/**
 * Finds all
 * @param id    the id
 * @param codes list of codes
 * @return entities
*/
@RequestLine("GET " + PATH + "get")
List<Entity> get(@Param("id") Integer id, @Param("codes") List<Long> codes);

也就是说,重写代码应该按照以下场景进行:

  • 方法的主体由符号 代替;。
  • 该方法具有访问修饰符。
  • 注释掉了。@GET_@Path@Produces
  • 注释被传送而不作任何更改。
  • 在方法上方形成以下形式的字符串:@RequestLine("[аннотация @GET без символа @]" + PATH + "[содержимое аннотации @Path без первого символа /]").
  • 方法参数注释从@QueryParam变为@Param。

返回类型、参数个数和名称在不同的方法中可以不同。@GET此外,它可以是@POSTor ,而不是 annotation @DELETE。

什么技术可以让我最有效地执行这样的代码转换?

java текст
  • 1 个回答
  • 140 Views
Martin Hope
Zhenyria
Asked: 2022-07-06 14:39:26 +0000 UTC

如何修复环境变量中的错误编码?

  • -1

我正在尝试Docker通过IDEA工作系统连接Windows 8.1。连接虚拟机时出现错误:

连接到虚拟机时出错

com.github.dockerjava.api.exception.DockerClientException:启用 TLS 验证 (DOCKER_TLS_VERIFY=1) 但证书路径 (DOCKER_CERT_PATH) 'C:\Users\ЕвгеРРРёР№\.docker\machine\machines\default' 不存在.

在此处输入图像描述

错误的原因很容易找出。环境变量如下:

DOCKER_CERT_PATH=C:\Users\Eugene\.docker\machine\machines\default

路径中的单词Евгений似乎被解释为错误的编码(特别是在 windows-1251 中),因此出现了所有问题。当然,我想到了两个最简单的解决方案:

  1. 将带有证书的文件夹放在不同的路径中(没有西里尔字母)。
  2. 重命名系统用户。

还有其他方法吗?如何在编码中强制IDEA收紧环境变量UTF-8?

UPD (05/09/22):将带有证书的文件夹放在不同的路径中不会提供任何东西。因为当我更改环境变量中的路径,然后启动虚拟机时,路径被设置回原来的路径。显然 Oracle VM 会这样做,我不明白如何禁用此行为。我还尝试将 DOCKER_TLS_VERIFY 环境变量更改为 0 以完全禁用证书验证,但该变量在 VM 启动时也设置为 1。

java docker
  • 1 个回答
  • 67 Views
Martin Hope
Zhenyria
Asked: 2022-07-05 16:45:22 +0000 UTC

编译 Gradle 项目时出现编码错误

  • 0

我有一个 Java 项目Gradle。执行命令./gradlew build时,出现编译错误:

用于编码 Cp1251 的不可映射字符

工程中有西里尔文行,所有工程文件都设置了编码UTF-8,但还是报错。我添加了build.gradle以下几行:

compileJava {
    options.encoding = 'UTF-8'
}

tasks.withType(Javadoc) {
    options.encoding = 'UTF-8'
}

没有变化。唯一有帮助的是将某些西里尔文文件中的编码从 手动更改UTF-8为windows-1251,但这看起来不是一个干净的解决方案。作为一个工作系统,我使用 Windows 8.1。

我怎么解决这个问题?

22 年 5 月 25 日的更新:我尝试以application这种方式连接和使用插件:

plugins {
    id "application"
}

applicationDefaultJvmArgs = ["-Dfile.encoding=UTF-8"]

但这也不会改变任何事情。在构建过程中,由于几行使用西里尔文的代码,错误再次发生。例如,这是错误之一:

error: unmappable character for encoding Cp1251
{"╨п╨╜╨▓", "╨д╨╡╨▓", "╨Ь╨░╤А", "╨Р╨┐╤А", "╨Ь╨░╨╣", "╨?╤О╨╜", "╨?╤О╨╗", "╨Р╨▓╨│", "╨б╨╡╨╜", "╨Ю╨║╤В", "╨Э╨╛╤П", "╨Ф╨╡╨║"};

而原始代码是:

{"Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"};
java windows
  • 1 个回答
  • 195 Views
Martin Hope
Zhenyria
Asked: 2022-07-19 19:17:02 +0000 UTC

是否可以使用 try-with-resources 关闭列表的所有元素?

  • 1

生成的列表/数组由 组成AutoCloseable。是否可以使用try-with-resources关闭列表的所有元素?

因为现在我必须手动编写try-with-resources功能,这不适合我:

Set<AutoCloseable> autoCloseableResources = new HashSet<>();
try {
    // генерируем здесь AutoCloseable элементы и добавляем их в множество autoCloseableResources
} catch (Throwable var11) {
    var2 = var11;
    throw var11;
} finally {
    autoCloseableResources
        .forEach(resource -> {
            if (resource != null) {
            if (var2 != null) {
                try {
                    resource.close();
                } catch (Throwable var10) {
                    var2.addSuppressed(var10);
                }
            } else {
                resource.close();
            }
        }
    })
}

autoCloseableResources是否可以使用try-with-resources以某种方式自动关闭列表的所有元素?

java
  • 2 个回答
  • 10 Views
Martin Hope
Zhenyria
Asked: 2022-07-01 16:45:47 +0000 UTC

CGlib 如何处理 final 方法?

  • 1

我有这样的服务:

@Service
public class SomeService {
    private final ThreadLocal<SomeData> threadLocalData = new ThreadLocal<>();

    @Transactional
    public void someProcess() {
        // некоторая логика
    }

    public final SomeData pull() {
        SomeData data = threadLocalData.get();
        threadLocalData.remove();
        return data;
    }
}

由于在服务中打开了事务(并且由于服务没有实现任何接口),服务被包装在 CGlib 代理中。因此,我在pull()从其他服务调用该方法时遇到了问题,因为由于threadLocalData代理中的字段为空而引发了 NullPointerException。

这是正常和预期的行为。但是,我对此很感兴趣:在编译 CGlib 时,最终方法究竟是如何处理的?因为这就是我想象从我的对象获得的代理的方式:

@Service
public class SomeService$$CGlibProxy extends SomeService {
    SomeService someService;

    @Override
    public void someProcess() {
        // создание транзакции
        someService.someProcess();
        // закрытие транзакции
    }

    ???
}

也就是说,很明显,代理复制了父级的所有字段(虽然它们都是空的)。并且方法发生了什么也很清楚someProcess (之前的一些逻辑,调用真正的方法,之后的一些逻辑)。

但是该方法会发生什么pull()?是final的,但同时CGlib没有报错,而且这个方法是在proxy上调用的,也是访问threadLocalDataproxy本身的字段。

该方法是如何创建的,它pull()在代理中是什么样的?

java
  • 1 个回答
  • 10 Views
Martin Hope
Zhenyria
Asked: 2022-06-12 04:59:49 +0000 UTC

如何从命令行运行 XJC?

  • 0

我正在尝试使用XJC从 XSD 生成 Java 类。我想知道我该怎么做?

到目前为止,我已经完成了以下工作:

  • 下载并解压JAXB
  • 将系统变量设置JAXB_HOME为值C:\Program Files\Java\jaxb-ri-2.3.1 (解压 jaxb-ri-2.3.1 存档内容的目录地址)

显然这还不够,因为在控制台中编写命令时,会xjc出现一条消息,指出这是一个未知命令。虽然在我看过的那些指南中,这已经足够了。

我还能做些什么来解决我的问题?

Windows 8.1 系统,使用标准的 Windows 命令行和 Git Bash 命令。

windows
  • 1 个回答
  • 10 Views
Martin Hope
Zhenyria
Asked: 2022-04-15 17:57:46 +0000 UTC

是否可以选择退出 try-with-resources?

  • 0

前言:为了模拟静态方法,Mockito 有一个MockedStatic继承自AutoClosable. 因此,它通常是这样使用的:

try (MockedStatic<SomeUtil> staticMockedSomeUtil = new MyClass()) {
    // некоторая логика
}

我想指出,方法MockedStatic不会抛出检查异常,包括close().

在这方面,我想到了放弃使用块try-with-resources并制作类似这个实用程序的东西,我将在测试中使用:

public class TestUtil {

    private final List<MockedStatic<?>> activeResources = new ArrayList<>();

    public <T> MockedStatic<T> mock(Class<T> clazz) {
        MockedStatic<T> mockedClass = MockedStatic.mockStatic(clazz);
        activeResources.add(mockedClass);
        return mockedClass;
    }

    public void closeAll() {
        activeResources.forEach(resource -> resource.close());
    }
}

首先,在测试中可以拒绝使用try-with-resources,代码会变得更干净。其次,我想编写一个实用程序类来测试整个团队都将使用。

try-with-resources因此,问题是:如果用于访问资源的类在运行或关闭时不抛出检查异常,我是否需要?

java
  • 2 个回答
  • 10 Views
Martin Hope
Zhenyria
Asked: 2022-08-21 04:29:35 +0000 UTC

为什么正则表达式中的点字符不捕获换行符?

  • 1

材料中常说regex点特殊字符.表示任何字符。但事实并非如此,点表示除换行符以外的任何字符。

因此,我遇到了一个错误,总的来说,这种对齐方式让我感到惊讶。

假设我想捕获这样的文本:

Шла Саша по шоссе
и сосала


сушку

我会做这样的事情:\A.*\Z,但事实证明这是行不通的。但是,可以通过指定不应出现的字符来捕获上述文本。像这样的例子:\A[^%]*\Z

我有两个问题:

  1. 为什么点不意味着换行(这样的决定有什么意义)?
  2. 当我想捕获任何东西(包括换行符)时,我该如何处理?

重要提示:我知道这个问题的存在。但首先,我想了解为什么它在历史上发展得如此之快,以至于点没有捕捉到换行符。其次,我有兴趣在 context 中解决问题java。

java
  • 1 个回答
  • 10 Views
Martin Hope
Zhenyria
Asked: 2022-07-13 21:32:04 +0000 UTC

是否可以通过枚举属性在 JPQL 中排序?

  • 0

精华:

@Entity
@Table(name = "shapes")
public class Shape {

    @Id
    Integer id;

    @Column(name = "type")
    @Enumerated(EnumType.STRING)
    ShapeType type;
}

枚举:

public enum ShapeType {

    RECTANGLE("Прямоугольник"),
    SQUARE("Квадрат"),
    CIRCLE("Круг");

    private final String name;

    ShapeType(name) {
        this.name = name;
    }
}

在获取形状列表时,我想按name字段属性进行排序。type在我的理解中,它会是这样的:

@Query("SELECT s FROM Shape s ORDER BY s.type.name ASC")
List<Shape> getAll();

但是这样的请求会产生错误:

org.hibernate.QueryException: could not resolve property: name of: com.zhenyria.project.model.Shape

有没有办法按字段本身排序enum?也许覆盖一个方法compareTo()或类似的东西会有所帮助?

重要提示:排序必须在数据库级别进行。我正在使用分页,所以代码中的排序选项不起作用!

java
  • 1 个回答
  • 10 Views
Martin Hope
Zhenyria
Asked: 2022-06-25 20:48:31 +0000 UTC

java - 为什么当字段已经是常量时,它要求将其设为常量?

  • 1

注释@EnableRedisHttpSession值用常量的值初始化SESSION_TIME_TO_LIVE:

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = SessionConfig.SESSION_TIME_TO_LIVE)
public class SessionConfig extends AbstractHttpSessionApplicationInitializer {

    public static final Integer SESSION_TIME_TO_LIVE = 600;

    ...
}

尝试启动应用程序时,出现错误:java: element value must be a constant expression. 由于该字段SESSION_TIME_TO_LIVE具有不可变类型Integer,并且用 标记final,因此可以将其视为常量。那么为什么会出现错误呢?

奇怪的是,如果您将其替换Integer为int. 有趣的是,使用 也没有问题String,尽管它不是原始的:

@RestController
@RequestMapping(AdminReportController.REST_URL)
@AllArgsConstructor
public class AdminReportController {

    protected static final String REST_URL = "/reports";

    ...

为什么会这样?

java
  • 1 个回答
  • 10 Views
Martin Hope
Zhenyria
Asked: 2022-06-19 04:21:19 +0000 UTC

为什么axios发送的是空对象而不是map?

  • 0

我使用React和axios。我正在尝试发送请求:

/* Здесь создаётся объект axios */
const apiRequester = axios.create({
    baseURL: 'http://localhost:8080/',
    withCredentials: true
});

/* Данный метод должен отправить запрос */
const saveOpenParagraphs = (id, paragraphsToSave) => {
    console.log(paragraphsToSave)
    return apiRequester.post('programs/' + id + '/open-paragraphs', paragraphsToSave, {
        headers: {
            'X-XSRF-TOKEN': getXSRFToken()
        }
    });
}

/* Не имеет прямого отношения к вопросу, но мало ли, вдруг как-то влияет */
const getXSRFToken = () => {
    return Cookies.get('XSRF-TOKEN');
}

一个对象paragraphsToSave就是一张地图。这是它在控制台中的外观(在发送请求之前记录):

Map(22) {100007 => 400, 100015 => 900, 100016 => 1000, 100017 => 1100, 100018 => 1200, …}
[[Entries]]
0: {100007 => 400}
1: {100015 => 900}
2: {100016 => 1000}
3: {100017 => 1100}
4: {100018 => 1200}
5: {100019 => 1300}
6: {100020 => 1400}
7: {100021 => 1500}
8: {100022 => 1600}
9: {100023 => 1700}
10: {100024 => 1800}
11: {100027 => 2100}
12: {100028 => 2200}
13: {100029 => 2300}
14: {100030 => 2400}
15: {100031 => 2500}
16: {100032 => 2600}
17: {100033 => 2700}
18: {100035 => 2800}
19: {100036 => 3000}
20: {100037 => 3100}
21: {100038 => 3200}
size: (...)
__proto__: Map

在 masonrynetwork中,请求正文如下所示:

{}

为什么会这样?其余的对象都正常发送(我之前没发卡),但是这里的请求体是空的。怎么修?

javascript
  • 2 个回答
  • 10 Views
Martin Hope
Zhenyria
Asked: 2022-06-17 04:42:25 +0000 UTC

如何正确初始化useState?

  • 0

该组件必须具有以下功能:

  1. 从服务器获取对象列表。
  2. 允许用户对结果列表进行排序(同时在本地保存更改state而不将它们发送到服务器)
  3. 更改后,可以将列表发送到服务器以保存更改。

对象如下所示:

{
    id: 1,
    name: 'Fruit',
    sortNum: 123
}

存在渲染问题。这是组件:

const UpdateList = ({objects, setObjects, closeObjects}) => {

    useEffect(() => {
        setObjects();
        return () => closeObjects();
    }, []);

    let [sortableObjects, setSortableObjects] = useState(
        objects && objects
            .map(o => ({
                        id: o.id,
                        name: o.name,
                        sortNum: o.sortNum
                      })
            )
            .sort((o, o1) => o.sortNum - o1.sortNum));

    const swapElements = (firstObject, secondObject) => {
        const sortNum = firstObject.sortNum;
        firstObject.sortNum = secondObject.sortNum;
        secondObject.sortNum = sortNum;
    }

    const moveUp = (index) => {
        if (index > 0) {
            swapElements(sortableObjects[index], sortableObjects[index - 1]);
            setSortableObjects(sortableObjects);
        }
    }

    return (
        <div>
            {sortableObjects && sortableObjects
                .sort((o, o1) => o.sortNum - o1.sortNum)
                .map((o, index) => <div key={o.id} onClick={() => moveUp(index)}>{o.name}</div>)}
        </div>
    );
}

const mapStateToProps = (state) => ({objects: state.objects});

export default connect(mapStateToProps, {setObjects, closeObjects})(UpdateList);

如您所见,用户单击某些对象以将它们抬高一点。但是,问题出现在渲染阶段 - 列表只是空的并且没有显示(尽管数据来了,甚至写入了我检查过的状态)。

也许我以useState()错误的方式设置值。我怎样才能做到正确?

javascript
  • 1 个回答
  • 10 Views
Martin Hope
Zhenyria
Asked: 2022-06-14 03:33:48 +0000 UTC

如何在没有提交按钮的情况下提交表单?

  • 0

我也使用React图书馆redux-form。我想制作一个将在事件中发送的表格onBlur。有一个组件:

const UpdateTargetForm = ({handleSubmit, error, close}) => {
    return (
        <form onSubmit={handleSubmit}>
            <Field name={"field"} component={"input"} onBlur={???}/>
        </form>
    )
}

我应该写什么函数onBlur来提交表单?

javascript
  • 1 个回答
  • 10 Views
Martin Hope
Zhenyria
Asked: 2022-06-01 18:28:02 +0000 UTC

如何在单向多对多关系上使用 JPQL 中的 IN 运算符?

  • 0

有两个实体:

@Entity
public class Person {
    
    @Id
    Integer id;

    @ManyToMany
    @JoinTable(
            name = "persons_addresses",
            joinColumns = @JoinColumn(name = "person_id"),
            inverseJoinColumns = @JoinColumn(name = "address_id")
    )
    Set<Address> addresses;
}
@Entity
public class Address {
    
    @Id
    Integer id;

    @Column(name = "street")
    String street;
}

特殊之处在于它Person指的是Address,而Address不是Person指。

编译 JPQL 查询时会出现复杂性。我需要找到一个人拥有的地址以及街道与某个字符串匹配的位置。这样的 JPQL 查询会抛出错误:

@Query("SELECT a FROM Address a 
            WHERE a.street=:street 
            AND a IN (SELECT p.addresses FROM Person p WHERE p.id=:personId)")
Set<Address> getAllByStreetAndPersonId(String street, int personId);

从日志来看,这是因为这段代码: 被a IN (SELECT p.addresses解释为:a.id IN (SELECT .。

如何正确提出请求?

java
  • 1 个回答
  • 10 Views
Martin Hope
Zhenyria
Asked: 2022-05-28 01:38:44 +0000 UTC

为什么在一种情况下使用 @EntityGraph 和 JOIN 会导致错误,但在另一种情况下工作正常?

  • 1

从数据库加载实体时,我使用@NamedEntityGraph. 我试图在这样的查询中使用这样的图表:

@EntityGraph(value = "paragraph-graph-questions")
@Query("SELECT sp FROM Paragraph p JOIN p.subParagraphs sp WHERE p.id=:id")
Set<Paragraph> getAllSubParagraphs(int id);

这会导致以下错误:

org.hibernate.QueryException: query specified join fetching, 
but the owner of the fetched association was not present in the select list ...

需要注意的是,这种情况下的请求是自反的,因为实体通过 OneToMany 关系Paragraph引用其他实体:Paragraph

@NamedEntityGraph(
        name = "paragraph-graph-questions",
        attributeNodes = {
                @NamedAttributeNode(value = "questions")
        })
@Entity
@Table(name = "paragraphs")
public class Paragraph {

    @Id
    private Integer id

    @OneToMany(mappedBy = "paragraph")
    private Set<Question> questions;

    @OneToMany
    @JoinTable(
            name = "sub_paragraphs",
            joinColumns = @JoinColumn(name = "paragraph_id"),
            inverseJoinColumns = @JoinColumn(name = "sub_paragraph_id")
    )
    private Set<Paragraph> subParagraphs;
}

我决定你不能同时使用JOIN两者EntityGraph,因为这会导致错误。但是,显然,一切都不是那么明确,因为这样的查询可以与实体图一起正常工作:

@EntityGraph(value = "report-graph-low")
@Query("""
        SELECT r FROM Report r 
        LEFT JOIN r.themeDetails td ON td.theme.id=:themeId 
        LEFT JOIN r.paragraphDetails pd ON pd.paragraph.theme.id=:themeId 
        LEFT JOIN r.offlineThemeDetails od ON od.theme.id=:themeId 
        WHERE r.student.id=:studentId
        """)
List<Report> getAllByStudentIdAndThemeId(int studentId, int themeId, Pageable pagination);

在实体的情况下,Report没有自反关系。

为什么它在一种情况下失败而在另一种情况下失败?如何subParagraphs使用实体图获取集合?

PS:我知道我可以在 Paragraph 字段 Paragraph parent 中做什么,确实会更容易,但我想以不同的方式来做。

java
  • 1 个回答
  • 10 Views
Martin Hope
Zhenyria
Asked: 2022-05-27 01:26:26 +0000 UTC

如何编写 JPQL 查询以获取其子实体可以为空的实体(而这些实体参与 WHERE 子句)?

  • 1

有一个实体Truck。它与实体Dirty和OneToOne 关系有关Gravel。Sand此外,这三个实体中的两个始终为空(好像一辆卡车一次只能装载一个负载,其余的将是空的)。

卡车:

@Entity
public class Truck {
    
    @Id
    Integer id;

    @Column(name = "owner")
    String owner;

    @OneToOne(mappedBy = "truck")
    Dirty dirty;
    
    @OneToOne(mappedBy = "truck")
    Gravel gravel;

    @OneToOne(mappedBy = "truck")
    Sand sand;
}

货物类(继承自 AbstractCargo):

@MappedSuperClass
public abstract class AbstractCargo {

    @OneToOne
    @JoinColumn(name = "truck_id")
    Truck truck;

    @Column(name = "weight")
    int weight;
}

@Entity
public class Dirty {
}

@Entity
public class Gravel {
}

@Entity
public class Sand {
}

现在我需要获取一个实体列表,Truck其属性owner等于某个字符串并与实体关联Dirty,Gravel或者Sand,其中属性weight等于某个数字(我提醒您,一个实体Truck一次只能有一个负载,其余的将为空)。顺便说一句,我正在使用EntityGraph,所以使用是JOIN不可取的(Hibernate 开始发誓)。

用人类语言来说,然后我需要获取属于某个所有者的所有卡车,这些卡车的负载等于某个数量。

我尝试了很长时间进行正确的 JPQL 查询,但这就是发生的事情:

SELECT t FROM Truck t, Dirty d, Gravel g, Sand s
    WHERE t.owner=:owner
    AND ((d.truck.id=t.id AND d.weight=:weight) OR
         (g.truck.id=t.id AND g.weight=:weight) OR
         (s.truck.id=t.id AND s.weight=:weight))

但结果是疯狂的(行重复)。

我如何在这里提出请求?

java
  • 3 个回答
  • 10 Views
Martin Hope
Zhenyria
Asked: 2022-05-25 16:42:22 +0000 UTC

如何编写 JPQL 查询以从具有多对多关系的另一个实体获取实体的排序列表?

  • 1

有两个实体:

@Entity
public class A {
    
    @Id
    Integer id;

    @ManyToMany
    @JoinTable(
            name = "a_b",
            joinColumns = @JoinColumn(name = "a_id"),
            inverseJoinColumns = @JoinColumn(name = "b_id")
    )
    @OrderBy("name")
    Set<B> bs;
    
}
@Entity
public class B {
    
    @Id
    Integer id;

    String name;
    
}

我想获取绑定到实体A的实体B的列表。一般来说,这通常很容易完成:

SELECT a.bs FROM A a WHERE a.id=:id

但问题是我仍然需要在结果列表中对实体B进行排序。此代码将不起作用:

SELECT a.bs FROM A a WHERE a.id=:id ORDER BY a.bs.name ASC

因为在访问实体列表时无法获取实体属性(y 唯一可用的属性a.bs是大小)。由于B类中没有字段A ,因此问题更加复杂,因此我不能这样做:

SELECT b FROM B b WHERE b.a.id=:id

所以。我们需要通过实体 id A获取实体B的排序列表。我做了这个 JPQL 查询:

SELECT a.bs AS b FROM A a WHERE a.id=:id ORDER BY b.name ASC

但是在编译的时候,出现错误:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'b.name'

虽然在编辑 IDEA 代码时,它没有显示任何错误。

我应该如何修改查询以获取实体B的排序列表?

java
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5